我的代码目前看起来是这样的(这些步骤分裂成多个功能):
/* open file */
FILE *file = fopen(filename, "r+");
if(!file) {
/* read the file */
/* modify the data */
/* truncate file (how does this work?)*/
/* write new data into file */
/* close file */
fclose(file);
}
我知道我可以在打开该文件与"w"
模式,但我不想这样做在这种情况下。 我知道有一个函数ftruncate
在unistd.h
/ sys/types.h
,但我不希望(太在Windows上)使用这些功能,我的代码应该是非常便携。
有没有一种可能,以清除文件而不关闭/重新打开它?
使用标准C,唯一的办法就是每次你需要截断的时间来重新打开该文件中的“W +”模式。 您可以使用freopen()
这一点。 “W +”将继续允许从中读取,因此没有必要在“R +”模式再次关闭并重新打开。 的“W +”的语义是:
打开阅读和写作。 如果不存在,该文件被创建,否则将被截断。 流被定位在文件的开头。
(从则fopen(3)手册页获得。)
您可以使用时,传递一个NULL指针作为文件名参数freopen()
my_file = freopen(NULL, "w+", my_file);
如果您不需要再在所有从文件中读取,当“W”模式也将做得很好。
您可以编写一个函数是这样的:(伪代码)
if(this is linux box)
use truncate()
else if (this is windows box)
use _chsize_s()
这是您的需要选择最简单的解决方案。
请参阅:人截断并_chsize_s在msdn.microsoft.com
和包括必要的头文件了。