在我的下面的代码中,据我所知,文件正在正确写入。当我查看文件floats.dat时,我看到这个二进制文件流ÍÌL@33c@ÍÌÜ@ffFAßOeA^@^@bBf6zE33äCff<83>BÍ̦B
但是我的程序总是最终触发if语句:
if(fread(inputFloats, sizeof(float), LENGTH, binaryFile) < LENGTH)
{
fprintf(stderr, "Problem reading some or all data from %s\n\n", binaryFileName);
return EXIT_FAILURE;
}
有人看到我在这里做错了吗?完整代码如下。
#include <stdlib.h>
#include <stdio.h>
#define LENGTH 10
int main(void)
{
FILE *binaryFile, *textFile;
char *binaryFileName = "floats.dat", *textFileName = "floats.txt";
float floats[LENGTH] = {3.2, 3.55, 6.9, 12.4, 14.332, 56.5, 4003.4, 456.4, 65.7, 83.4};
float inputFloats[LENGTH];
int i;
if((binaryFile = fopen(binaryFileName, "r+")) == NULL)
{
fprintf(stderr, "Problem opening %s", binaryFileName);
}
if(fwrite(floats, sizeof(float), LENGTH, binaryFile) < LENGTH)
{
fprintf(stderr, "Problem writing some or all data to %s\n", binaryFileName);
return EXIT_FAILURE;
}
printf("DATA WRITTEN SUCCESSFULLY\n");
if(fread(inputFloats, sizeof(float), LENGTH, binaryFile) < LENGTH)
{
fprintf(stderr, "Problem reading some or all data from %s\n\n", binaryFileName);
return EXIT_FAILURE;
}
for(i = 0; i < LENGTH; i++)
{
printf("float[%d] = %f\n", i, floats[i]);
}
return EXIT_SUCCESS;
}
答案 0 :(得分:7)
r+b
代替r+
fseek(binaryFile, 0, SEEK_SET)
来“倒回”文件。 rewind
也适用于这种情况 - fseek
允许您将读/写指针放在任何位置。答案 1 :(得分:1)
FILE
结构记录了当前指向的文件的位置。由于您刚刚写入binaryFile
,因此文件指针位于您所写内容的 end 。
因此,您需要在阅读之前使用fseek(binaryFile, 0, SEEK_SET);
来回放文件。
答案 2 :(得分:1)
在阅读之前,您忘记了回放文件:
rewind(binaryFile);
答案 3 :(得分:0)
当你完成对文件的写入时,FILE指针就在它的末尾,所以当然如果你尝试阅读它将无效。尝试使用fseek
将指针移动到文件的开头,然后再阅读。
请避免这样:
if((binaryFile = fopen(binaryFileName, "r+")) == NULL) {
并且更喜欢这个:
binaryFile = fopen(binaryFileName, "rb+");
if(!binaryFile) {