c语言:fwrite什么都不做

时间:2018-02-01 19:20:32

标签: c fwrite

{
FILE* f1 = fopen("C:\\num1.bin", "wb+");//it will create a new file 
int A[] = { 1,3,6,28 }; //int arr
fwrite(A, sizeof(A), 1, f1); //should insert the A array to the file
}

我确实看到了文件但是即使在fwrite之后,文件仍为空(0字节)有人知道为什么吗?

3 个答案:

答案 0 :(得分:7)

您需要使用fclose

关闭文件

否则写缓冲区不会(必然)强制将文件内容写入磁盘

答案 1 :(得分:5)

有几件事:

  1. 正如@Grantly上面正确指出的那样,在写入文件后,您错过了对sortedCursorArray.splice(10)fclose的调用。如果没有这个,任何缓存/挂起的写入都不一定会实际写入打开的文件。
  2. 您不检查fflush的返回值。如果fopen因任何原因失败,它将返回NULL指针而不是有效的文件指针。由于您是在Windows平台上直接写入驱动器C:\的根目录,因此您肯定要检查的内容(不是在其他情况下也不应该这样,但是在常规用户帐户下运行该位置通常是写保护的。)

答案 2 :(得分:2)

fwrite的结果不需要在返回后立即出现在fille中。这是因为文件操作通常以缓冲方式工作,即它们被缓存然后刷新以加快速度并提高性能。

致电fclose后,文件内容将会更新:

  

<强> FCLOSE()

     

(...)任何未写入的缓冲数据都会刷新到操作系统。任何未读缓冲   数据被丢弃。

您也可以使用fflush

显式刷新内部缓冲区而不关闭文件
  

<强> fflush()

     

用于输出流(以及用于上次操作的更新流)   输出),将任何未写入的数据从流的缓冲区写入   相关输出设备。