在C语言中读取二进制文件的奇异性
我在C中定义了这样的二进制文件在C语言中读取二进制文件的奇异性,c,pointers,file-io,binaryfiles,file-pointer,C,Pointers,File Io,Binaryfiles,File Pointer,我在C中定义了这样的二进制文件 FILE *gfp; gfp = fopen(gridfiles, "wb"); 变量gridfiles存储文件名,前面已经定义过。现在我将两个变量写入文件 for(yy = 0; yy < nfiley; yy++) { for(xx = 0; xx < nfilex; xx++) { filebx = beguv + xx*1E3; fileby = enduv - yy*1E3; fwrite(&
FILE *gfp;
gfp = fopen(gridfiles, "wb");
变量gridfiles存储文件名,前面已经定义过。现在我将两个变量写入文件
for(yy = 0; yy < nfiley; yy++) {
for(xx = 0; xx < nfilex; xx++) {
filebx = beguv + xx*1E3;
fileby = enduv - yy*1E3;
fwrite(&filebx, sizeof(filebx), 1, gfp);
fwrite(&fileby, sizeof(fileby), 1, gfp);
}
}
我的输出是
1000 15000
14000 14000
对于前两个,这是意料之中的
但是,如果在编写了一些其他代码(根本不涉及这些文件)之后,我重复fseek()等等,我的输出是
1000 15000
14000 14000
不管我做什么。
我想弄明白这件事已经有一段时间了。。。有人知道我做错了什么吗?这是从以写模式打开的流中读取。你应该做到:
gfp = fopen(gridfiles, "wb+");
如果你打算读和写
此外,正如@Kyle Jones在上面的评论中指出的,在执行文件I/O时,您应该养成检查fread
/fwrite
的返回状态的习惯-这会更早发现您的问题。这是从以写模式打开的流中读取。你应该做到:
gfp = fopen(gridfiles, "wb+");
如果你打算读和写
此外,正如@Kyle Jones在上面的评论中指出的那样,在执行文件I/O时,您应该养成检查
fread
/fwrite
返回状态的习惯-这会更早发现您的问题。您是否适当地调用fflush
?我刚刚添加了它并再次运行了它。。。同样的结果!fflush()不适用于fread,是吗?您知道从以写模式打开的文件中读取是很困难的,对吗?您应该将其设置为fopen(gridfiles,“wb+”)代码>如果你打算同时读写。@PaulR-太糟糕了,我只有一票赞成票。你真棒!谢谢没问题-如果这已经解决了问题,我会给出一个答案。您是否适当地调用fflush
?我刚刚添加了它,然后再次运行它。。。同样的结果!fflush()不适用于fread,是吗?您知道从以写模式打开的文件中读取是很困难的,对吗?您应该将其设置为fopen(gridfiles,“wb+”)代码>如果你打算同时读写。@PaulR-太糟糕了,我只有一票赞成票。你真棒!谢谢没问题-如果这已经解决了问题,我会回答的。