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 !
Bạn đóng file rồi thì hỏi sao mà nó không ra 0
Cảm ơn anh ! Mắc lỗi ngớ ngẩn quá