写在文件中的问题

时间:2011-03-01 16:31:02

标签: c fopen

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但是我面临的问题是我的代码擦除所有字符只需写一个。需要帮助。谢谢

5 个答案:

答案 0 :(得分:2)

每次打开文件时,都会将其作为“w”选项打开。在C中,这具有特定含义:开始在文件的开头写入。

首次编写文件时,这没关系,但是对于每次后续编写,您都会覆盖以前的内容。

解决方案在此处使用'a'属性。像这样:

FILE *fa = fopen("testdata.csv","a");

See more information about fopen here...

修改

阅读你的评论,我知道当你再次写作时,下一件事就是从新的一行开始。这是因为您的初始写入1 2 3 \n\n创建了一个新行。)

要纠正此问题,您可以:

  • 根本不要写'\ n'。 的 OR
  • 首先阅读整个文件,在没有\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 =追加