{ 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字节),有人知道为什么吗?
ktecyv1j1#
您需要使用fclose关闭文件否则,写入缓冲区将不会(一定)强制将文件内容写入磁盘
fclose
7cwmlq892#
有几件事:1.正如@Grantly在上面正确指出的那样,在写入文件后,您缺少对fclose或fflush的调用,否则任何缓存/挂起的写入都不一定会被实际写入打开的文件。1.你不需要检查fopen的返回值。如果fopen由于任何原因失败,它将返回一个NULL指针,而不是一个有效的文件指针。因为你直接写驱动器C:\的根目录,这是你肯定要检查的(不是说你不应该在其他情况下,但在一个普通用户帐户下运行,该位置通常是写保护的)。
fflush
fopen
flmtquvp3#
fwrite的结果不需要在返回后立即出现在文件中,这是因为文件操作通常以缓冲的方式工作,即它们被缓存,然后被刷新以加快速度和提高性能。调用fclose后,文件的内容将被更新:
fwrite
f关闭()
(...)任何未写入的缓冲数据都将刷新到操作系统。任何未读取的缓冲数据都将被丢弃。您也可以使用fflush显式刷新内部缓冲区而不关闭文件:
溢出()
对于输出流(以及输出最后一个操作的更新流),将任何未写入的数据从流的缓冲区写入关联的输出设备。
3条答案
按热度按时间ktecyv1j1#
您需要使用
fclose
关闭文件否则,写入缓冲区将不会(一定)强制将文件内容写入磁盘
7cwmlq892#
有几件事:
1.正如@Grantly在上面正确指出的那样,在写入文件后,您缺少对
fclose
或fflush
的调用,否则任何缓存/挂起的写入都不一定会被实际写入打开的文件。1.你不需要检查
fopen
的返回值。如果fopen
由于任何原因失败,它将返回一个NULL指针,而不是一个有效的文件指针。因为你直接写驱动器C:\的根目录,这是你肯定要检查的(不是说你不应该在其他情况下,但在一个普通用户帐户下运行,该位置通常是写保护的)。flmtquvp3#
fwrite
的结果不需要在返回后立即出现在文件中,这是因为文件操作通常以缓冲的方式工作,即它们被缓存,然后被刷新以加快速度和提高性能。调用fclose后,文件的内容将被更新:
f关闭()
(...)任何未写入的缓冲数据都将刷新到操作系统。任何未读取的缓冲数据都将被丢弃。
您也可以使用fflush显式刷新内部缓冲区而不关闭文件:
溢出()
对于输出流(以及输出最后一个操作的更新流),将任何未写入的数据从流的缓冲区写入关联的输出设备。