有没有办法用 fseek() 更改文件的一行?
Is there a way to change a single line of a file with fseek()?
我正在用 C 语言训练文件处理,我正在尝试使用 fseek()
更改文件的单行或位置,同时使用 fread()
和 fwrite()
写入和读取而不使用更改一个变量并再次写入整个文件,但显然无论是追加模式还是写入模式都不允许您这样做,因为我在下面的示例中尝试过:
void main()
{
FILE *file;
char answer;
char text[7] = "text 1\n";
char text2[7] = "text 2\n";
file = fopen("fseek.txt", "w"); //creating 'source' file
fwrite(text, sizeof(char), sizeof(text), file);
fwrite(text, sizeof(char), sizeof(text), file);
fwrite(text, sizeof(char), sizeof(text), file);
fclose(file);
scanf("%c", &answer);
switch(answer)
{
case 'a':
//attempt to change single line with append mode
file = fopen("fseek.txt", "a");
fseek(file, 7, SEEK_SET); //7 characters offset is the second line of the file
fwrite(text2, sizeof(char), sizeof(text), file);
fclose(file);
break;
case 'w':
//attempt to change single line with write mode
file = fopen("fseek.txt", "w");
fseek(file, 7, SEEK_SET); //7 characters offset is the second line of the file
fwrite(text2, sizeof(char), sizeof(text), file);
fclose(file);
break;
}
}
但是对于追加模式,它只是将变量写入文件末尾,即使事先使用了 fseek()
函数,而写入模式只是擦除文件并重写它。那么我如何使用 fseek()
或类似的方式更改文件的一行?
您需要以r+
模式打开。 w
模式首先清空文件,r
不会,因为它用于读取文件。 +
修饰符也允许您写入文件。
当您更改行时,新文本需要与原始行的长度相同。如果它更短,则原始行的其余部分将留在文件中。如果它更长,您将覆盖下一行的开头。
我正在用 C 语言训练文件处理,我正在尝试使用 fseek()
更改文件的单行或位置,同时使用 fread()
和 fwrite()
写入和读取而不使用更改一个变量并再次写入整个文件,但显然无论是追加模式还是写入模式都不允许您这样做,因为我在下面的示例中尝试过:
void main()
{
FILE *file;
char answer;
char text[7] = "text 1\n";
char text2[7] = "text 2\n";
file = fopen("fseek.txt", "w"); //creating 'source' file
fwrite(text, sizeof(char), sizeof(text), file);
fwrite(text, sizeof(char), sizeof(text), file);
fwrite(text, sizeof(char), sizeof(text), file);
fclose(file);
scanf("%c", &answer);
switch(answer)
{
case 'a':
//attempt to change single line with append mode
file = fopen("fseek.txt", "a");
fseek(file, 7, SEEK_SET); //7 characters offset is the second line of the file
fwrite(text2, sizeof(char), sizeof(text), file);
fclose(file);
break;
case 'w':
//attempt to change single line with write mode
file = fopen("fseek.txt", "w");
fseek(file, 7, SEEK_SET); //7 characters offset is the second line of the file
fwrite(text2, sizeof(char), sizeof(text), file);
fclose(file);
break;
}
}
但是对于追加模式,它只是将变量写入文件末尾,即使事先使用了 fseek()
函数,而写入模式只是擦除文件并重写它。那么我如何使用 fseek()
或类似的方式更改文件的一行?
您需要以r+
模式打开。 w
模式首先清空文件,r
不会,因为它用于读取文件。 +
修饰符也允许您写入文件。
当您更改行时,新文本需要与原始行的长度相同。如果它更短,则原始行的其余部分将留在文件中。如果它更长,您将覆盖下一行的开头。