Không thể đọc thông tin từ tệp tin nhị phân

Em có đoạn code sau, đọc thông tin từ tệp tin nhị phân input.bin và show ra màn hình

void main(){
	FILE *pfile = fopen("input.bin", "rb");

	int a = 0;


	if (pfile == NULL)
	{
		printf("File open failed! \n");
	}
	rewind(pfile);
	fread(&a, sizeof(int), 1, pfile);
	
	printf("%d", a);
	fclose(pfile);
	_getch();
}

Trong file là số 2 nhưng nó lại load lên là 50, mọi ng xem giúp

Bởi vì file đó không phải là file binary, mà là file text. Giá trị lưu vào là số 2 tương ứng với 50 trong bản ASCII


Đây là code mới, ghi file xuống rồi đọc lên ra số 2.

#include <stdio.h>

int main()
{
    FILE *pfile = fopen("input.bin", "wb");
    if (pfile == NULL)
    {
        printf("File open failed! \n");
        return 1;
    }
    int input = 2;
    fwrite (&input , sizeof(int), sizeof(input), pfile);
    fclose (pfile);
    // read file
    pfile = fopen("input.bin", "rb");
    int a = 0;
    if (pfile == NULL)
    {
        printf("File open failed! \n");
    }
    rewind(pfile);
    fread(&a, sizeof(int), 1, pfile);
    printf("%d", a);
    fclose(pfile);
}
1 Like

Em thử chạy code của anh thì ok, sửa code để đọc trong file có 2 phần tử là 2, 10 (cách nhau bằng dấu space). Thì khi xuất ra a = 1 số rác 86804340 gì đấy. Code của em.

int main()
{
    FILE *pfile = fopen("input.bin", "wb");
    if (pfile == NULL)
    {
        printf("File open failed! \n");
        return 1;
    }
    
    // read file
    FILE* pfile = fopen("input.bin", "rb");
    int a = 0;
    if (pfile == NULL)
    {
        printf("File open failed! \n");
    }
    rewind(pfile);
    fread(&a, sizeof(int), 1, pfile);
    printf("%d", a);
    fclose(pfile);
}

Còn khi sửa

 fread(&a, 1, 1, pfile);

thì nó đọc đc a, xuất ra a = 50.

Em đừng nói là em lại tiếp tục mở file đó lên và sửa bằng tay nhé?

1 Like

À vậy là phải viết bằng fwrite luôn, tập nhị phân ko sửa tay đc ạ? Em mới biết, ok tks anh nhiều nha

1 Like

Sửa bằng tay thì nó ở dạng text file rồi :smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?