【发布时间】:2021-05-30 15:31:10
【问题描述】:
所以伪代码是:
现有文件 = 读取文件的全部内容。
String newcontent = "Blah Blah This is first line" + 现有
f.write(newcontent);
实际代码是
void Prepend(char *string, char *file_name)
{
char buf[100];
FILE *fp1, *fp2;
Append(string, "temp_file");
fp1 = fopen(file_name, "a+");
fp2 = fopen("temp_file", "a+");
if (!fp1 && !fp2) {
printf("Unable to open/"
"detect file(s)\n");
exit(1);
}
fprintf(fp2, "\n");
while (!feof(fp1)) {
fgets(buf, sizeof(buf), fp1);
}
rewind(fp2);
while (!feof(fp2)) {
fgets(buf, sizeof(buf), fp2);
}
fclose(fp1);
fclose(fp2);
remove(temp_file);
}
/*-----------------------------------------------------------------------------*/
void Append(char *string, char *file_name)
{
FILE *file = fopen(file_name, "a");
if(file==NULL)
{
printf("Error opening file.");
}
else
{
fputs(string, file);
}
fclose(file);
}
我知道fseek 和其他指针相关的东西可能有一种方法,但我认为使用“简单方法”并创建一个新的临时文件并正确删除它会更好更快之后。
好吧,它也不起作用。
【问题讨论】:
-
请注意,
if (!fp1 && !fp2)只有在两个文件都无法打开时才为真。如果其中一个(或两个)文件无法打开,请使用if (fp1 == NULL || fp2 == NULL)(或!fp1等,如果您愿意,我不会,但我可能是少数)使测试为真。 -
如果您以追加模式打开文件,所有写入都将发生在文件末尾(并且文件不会被截断)。只有当文件为空或不存在时才会在开始时写入数据。
-
@JonathanLeffler 是的,我知道。但这就是这里的目的。我正在创建一个名为
temp_file的不存在文件并将用户的输入字符串写入他。然后,我将原始文件的内容附加到这个字符串中,这就是我在原始数据之前“添加”用户字符串的方式。 -
否;您正在打开一个现有文件
temp_file或创建一个文件(如果它不存在)。您不知道该文件不存在;你只是希望它不存在。您可以使用"w"或"w+"模式来创建空文件或截断现有文件。现在,如果一切正常,temp_file不存在可能是正确的。
标签: c file text append prepend