明确/截断在C文件时已打开“R +”模式(clear/truncate file in C when

2019-07-01 09:17发布

我的代码目前看起来是这样的(这些步骤分裂成多个功能):

/* 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"模式,但我不想这样做在这种情况下。 我知道有一个函数ftruncateunistd.h / sys/types.h ,但我不希望(太在Windows上)使用这些功能,我的代码应该是非常便携。

有没有一种可能,以清除文件而不关闭/重新打开它?

Answer 1:

使用标准C,唯一的办法就是每次你需要截断的时间来重新打开该文件中的“W +”模式。 您可以使用freopen()这一点。 “W +”将继续允许从中读取,因此没有必要在“R +”模式再次关闭并重新打开。 的“W +”的语义是:

打开阅读和写作。 如果不存在,该文件被创建,否则将被截断。 流被定位在文件的开头。

(从则fopen(3)手册页获得。)

您可以使用时,传递一个NULL指针作为文件名参数freopen()

my_file = freopen(NULL, "w+", my_file);

如果您不需要再在所有从文件中读取,当“W”模式也将做得很好。



Answer 2:

您可以编写一个函数是这样的:(伪代码)

if(this is linux box) 
use truncate()
else if (this is windows box)
use _chsize_s()

这是您的需要选择最简单的解决方案。

请参阅:人截断并_chsize_s在msdn.microsoft.com

和包括必要的头文件了。



文章来源: clear/truncate file in C when already open in “r+” mode