FILE *ExcelFile = fopen("testdata.csv","w");
if (ExcelFile == NULL)
return -1;
fprintf(ExcelFile,"1 2 3");
fprintf(ExcelFile,"\n");
fclose(ExcelFile);
//==============================================
FILE *fa = fopen("testdata.csv","w");
if (fa == NULL)
return -1;
fseek (fa, 6 , SEEK_SET );
fprintf(ExcelFile,"a");
fclose(fa);
在代码中我已经在文件中写入了1 2 3并且还插入了'\ n'(程序所需)现在我想放置一个3之后的1 2 3 a但是我面临的问题是我的代码擦除所有字符只需写一个。需要帮助。谢谢
答案 0 :(得分:2)
每次打开文件时,都会将其作为“w”选项打开。在C中,这具有特定含义:开始在文件的开头写入。
首次编写文件时,这没关系,但是对于每次后续编写,您都会覆盖以前的内容。
解决方案在此处使用'a'属性。像这样:
FILE *fa = fopen("testdata.csv","a");
See more information about fopen here...
修改强>
阅读你的评论,我知道当你再次写作时,下一件事就是从新的一行开始。这是因为您的初始写入1 2 3 \n
(\n
创建了一个新行。)
要纠正此问题,您可以:
\n
的情况下重写它,然后写下新的a
和\n
答案 1 :(得分:2)
首先,CSV文件应具有“逗号分隔值”,如名称所示。所以,而不是“1 2 3”,你最好有“1,2,3”或“1; 2; 3”。
现在,有多种方法可以打开文件:您只使用“w”作为“书写”模式。当您处于书写模式时,您正在删除文件。你可以使用“a”作为“添加”模式,这意味着一切都将被放在它之后。
你也可以:
1°)首先使用“r”模式读取文件并将其存储在内存中。然后,关闭它。
2°)然后,使用“w”模式打开文件,复制存储的内容,然后进行附录。然后,关闭它。
(还有一个“读写模式”,检查另一个答案提供的链接;但是这个解决方案可以很容易地分成小块,让小函数完成每个部分的工作)。
答案 2 :(得分:1)
您为w
指定了fopen()
,这意味着“创建文件或打开以进行覆盖(如果已存在)”。
因此,您对fopen()
的第二次调用清除了文件的内容。
使用a
,用于:“创建文件,如果已经存在则附加到文件”。
答案 3 :(得分:1)
您想要模式“r +”。使用模式“a”,所有写入都将转到文件的末尾。
答案 4 :(得分:0)
fopen(filename,“a”)
a =追加