30/09/2018, 16:50

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! 
");
	}
	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

Nguyễn Minh Dũng viết 18:56 ngày 30/09/2018

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);
}
Đoàn Hiếu Tâm viết 18:54 ngày 30/09/2018

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.

Nguyễn Minh Dũng viết 19:01 ngày 30/09/2018

sửa code để đọc trong file có 2 phần tử là 2, 10 (cách nhau bằng dấu space)

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

Đoàn Hiếu Tâm viết 19:01 ngày 30/09/2018

À 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

Nguyễn Minh Dũng viết 18:58 ngày 30/09/2018

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

Bài liên quan
0