01/10/2018, 00:35

Lỗi không xuất được mảng đọc từ tập tin nhị phân

Hi everyone,

Mình đang làm 1 bài tập: Ghi 1 mảng trong chương trình xuống file nhị phân. Sau đó đọc từ file nhị phân đó vào lại chương trình.

Source code: http://codepad.org/3hgXcibD

void NhapMang(int *, int);
void XuatMang(int *, int);
void ReadFile(std::ifstream &, int *, int); // void ReadFile(FILE *&FileIn, int *, int);
void WriteFile(std::ofstream &, int *, int); // void WriteFile(FILE *&FileOut, int *, int);
void NhapMang(int *a, int n)
{
	for (int i = 0; i < n; ++i)
	{
		std::cout << "Nhap a[" << i << "] = ";
		std::cin >> a[i];
	}
}
void XuatMang(int *a, int n)
{
	for (int i = 0; i < n; ++i)
		std::cout << a[i] << "    ";
}
void ReadFile(std::ifstream &FileIn, int *a, int n)
{
	// FileIn = fopen("FILE.doc", "rb");
	FileIn.open("FILE.doc", std::ios_base::in | std::ios_base::binary);
	if (!FileIn)
	{
		std::cout << "File not found.
";
		exit(0);
	}
	// fread(a, sizeof(int), n, FileIn);
	FileIn.read((char *)a, n * sizeof(int));
	// fclose(FileIn);
	FileIn.close();
}
void WriteFile(std::ofstream &FileOut, int *a, int n)
{
	// FileOut = fopen("FILE.doc", "wb");
	FileOut.open("FILE.doc", std::ios_base::out | std::ios_base::binary);
	if (FileOut)
	{
		// fwrite(a, sizeof(int), n, FileOut);
		FileOut.write((char *)a, n * sizeof(int));
	}
	// fclose(FileOut);
	FileOut.close();
}
int main()
{
	int n = 5;
	std::ifstream FileIn; // FILE *FileIn;
	std::ofstream FileOut; // FILE *FileOut;
	int *a = new int[n]; // int *a = (int *)calloc(n, sizeof(int));
	NhapMang(a, n);
	WriteFile(FileOut, a, n);
	ReadFile(FileIn, a, n);
	FileIn.seekg(0, std::ios_base::end); // fseek(FileIn, 0, SEEK_END);
	// int m = (ftell(FileIn) + 1) / sizeof(int);
	int m = ((int)FileIn.tellg() + 1) / sizeof(int); // trả về số lượng phần tử trong file
	FileIn.seekg(0, std::ios_base::beg); // rewind(FileIn);
	XuatMang(a, m);
	delete[] a; // free(a);
	system("pause");
	return 0;
}

Vấn đề là nó ghi được mảng từ chương trình vào file nhị phân. Nhưng nó lại không đọc được từ file nhị phân vào chương trình.

Cụ thể là ở dòng int m = ((int)FileIn.tellg() + 1) / sizeof(int);. Sau khi debug thì em mới phát hiện là m = 0, tức là ((int)FileIn.tellg() + 1) / sizeof(int) = 0.

Ai biết lỗi này giúp em nhé, xin cảm ơn !

Nguyễn Xuân Phúc viết 02:43 ngày 01/10/2018

void ReadFile(std::ifstream &FileIn, int *a, int n)
{
// FileIn = fopen(“FILE.doc”, “rb”);
FileIn.open(“FILE.doc”, std::ios_base::in | std::ios_base::binary);
if (!FileIn)
{
std::cout << “File not found.\n”;
exit(0);
}
// fread(a, sizeof(int), n, FileIn);
FileIn.read((char *)a, n * sizeof(int));
// fclose(FileIn);
FileIn.close();
}

Bạn đóng file rồi thì hỏi sao mà nó không ra 0

Người bí ẩn viết 02:41 ngày 01/10/2018

Cảm ơn anh ! Mắc lỗi ngớ ngẩn quá

Bài liên quan
0