"fopen" 抛出异常
Expection thrown on "fopen"
我写了一个函数来读回一个二进制文件。进行调试时,它在行 "pFile=fopen(filename, "rb");" 上显示 "exception Thrown"。我不知道为什么。
另外,如何在函数"read_back(const char*filename)"
中return读回缓冲区
void read_back(const char *filename)
{
FILE* pFile;
long lSize=100;
char* buffer;
buffer = (char*)malloc(sizeof(char)*lSize);
pFile = fopen(filename, "rb");
if (pFile == NULL) { fputs("File error", stderr); exit(1); }
// copy the file into the buffer:
size_t result = fread(buffer, 1, lSize, pFile);
if (result != lSize) { fputs("Reading error", stderr); exit(3); }
fclose(pFile);
}
int main()
{
const char *fname[2];
fname[1] = "C:\1_data.bin";
fname[2] = "C:\2_data.bin";
fname[3] = "C:\3_data.bin";
for (int i = 0; i < 2; ++i)
{
read_back(fname[i]);
}
return 0;
}
您的代码中存在几个问题。
首先,数组索引以0
开头。 fname
是 2
char *
的数组,您错过了 fname[0]
的初始化。此外,您在数组末尾初始化数组 - fname[2]
和 fname[3]
。由于您的程序假设要读取三个文件,您应该这样做:
const char *fname[3];
fname[0] = "C:\1_data.bin";
fname[1] = "C:\2_data.bin";
fname[2] = "C:\3_data.bin";
将循环条件更改为i < 3
。
在 read_back()
中,您将 lSize
设置为 100
并在下面的代码中执行
if (result != lSize) { fputs("Reading error", stderr); exit(3); }
这意味着,要读取的文件应该有字节数,由 fread()
读取,或者 100
或更多,否则它是 Reading error
。此外,如果文件的字节数超过 100
,则除前 100
字节外,它将无法读取。可能你应该在循环中调用 fread()
并读取到文件末尾。
我写了一个函数来读回一个二进制文件。进行调试时,它在行 "pFile=fopen(filename, "rb");" 上显示 "exception Thrown"。我不知道为什么。 另外,如何在函数"read_back(const char*filename)"
中return读回缓冲区void read_back(const char *filename)
{
FILE* pFile;
long lSize=100;
char* buffer;
buffer = (char*)malloc(sizeof(char)*lSize);
pFile = fopen(filename, "rb");
if (pFile == NULL) { fputs("File error", stderr); exit(1); }
// copy the file into the buffer:
size_t result = fread(buffer, 1, lSize, pFile);
if (result != lSize) { fputs("Reading error", stderr); exit(3); }
fclose(pFile);
}
int main()
{
const char *fname[2];
fname[1] = "C:\1_data.bin";
fname[2] = "C:\2_data.bin";
fname[3] = "C:\3_data.bin";
for (int i = 0; i < 2; ++i)
{
read_back(fname[i]);
}
return 0;
}
您的代码中存在几个问题。
首先,数组索引以0
开头。 fname
是 2
char *
的数组,您错过了 fname[0]
的初始化。此外,您在数组末尾初始化数组 - fname[2]
和 fname[3]
。由于您的程序假设要读取三个文件,您应该这样做:
const char *fname[3];
fname[0] = "C:\1_data.bin";
fname[1] = "C:\2_data.bin";
fname[2] = "C:\3_data.bin";
将循环条件更改为i < 3
。
在 read_back()
中,您将 lSize
设置为 100
并在下面的代码中执行
if (result != lSize) { fputs("Reading error", stderr); exit(3); }
这意味着,要读取的文件应该有字节数,由 fread()
读取,或者 100
或更多,否则它是 Reading error
。此外,如果文件的字节数超过 100
,则除前 100
字节外,它将无法读取。可能你应该在循环中调用 fread()
并读取到文件末尾。