gpt4 book ai didi

c - 使用 fopen 的追加模式覆盖文件

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:29 26 4
gpt4 key购买 nike

由于遗留代码,我正在使用 fopen 写入二进制文件并使用 cstdio (stdio.h) 库,它必须跨平台兼容Windows 和 Linux。

对于原型(prototype),FILE * fopen (const char * filename, const char * mode);,我使用的是const char * mode = "ab",它将附加到二进制文件。写操作在文件末尾追加数据。如果文件不存在,则创建该文件。

我有 N 个输入文件,我在其中处理数据并为每种类型写入一个输出文件,其中我有 M 个类型。我处理一个输入文件并将数据写入每个相应的输出文件。然后我将关闭第 i 个输入文件并打开第 (i + 1) 个,并通过将输入文件中的数据附加到输出文件来重复该过程。

如果可执行文件的开头存在输出文件,我希望将其删除。如果它存在并且我没有删除它,那么当我使用 "wb" 模式时,它只会将数据附加到输出文件,这将导致我不想要的重复。 我对提升解决方案持开放态度,我喜欢尽可能保持标准(即尽可能避免使用 POSIX)

fopen C++ reference

最佳答案

这是一种方法

char* infile[N] = //input names
char* outfile[M] = //output names

int i, j;
for (i = 0; i < N; i++){
//process input
char* mode = "ab";
if (i == 0) mode = "wb";
for (j = 0; j < M; j++){
FILE* f = fopen(outfile[j], mode);
//write to file
fclose(f);
}
}

“w”模式应该覆盖文件。这是“a”模式,可以避免删除已经存在的文件。

编辑:如果您想在执行开始时删除文件,也可以remove (const char * filename)。如果是这种情况,那么您永远不必使用“wb”模式。

关于c - 使用 fopen 的追加模式覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com