【发布时间】:2021-12-28 00:45:51
【问题描述】:
我正在尝试用 C 语言编写一个程序,该程序读取一个文本文件并将 \r\n 替换为 \n 到将行结尾从 DOS 转换为 UNIX 的同一文件。我使用fgetc 并将文件视为二进制文件。提前致谢。
#include <stdio.h>
int main()
{
FILE *fptr = fopen("textfile.txt", "rb+");
if (fptr == NULL)
{
printf("erro ficheiro \n");
return 0;
}
while((ch = fgetc(fptr)) != EOF) {
if(ch == '\r') {
fprintf(fptr,"%c", '\n');
} else {
fprintf(fptr,"%c", ch);
}
}
fclose(fptr);
}
【问题讨论】:
-
Windows(以及历史上的 DOS)在行尾同时使用 \r 和 \n,因此您需要删除 \r 而不是替换它。而且,不要尝试就地执行 - 制作一个单独的输出文件。
-
二进制?不要将 \r 替换为 \n,因为它使用 \r\n,因此您最终会得到 \n\n。您覆盖下一个字符而不是替换字符。
-
你不能像那样从你正在写入的同一个文件中读取。您需要两个文件指针——一个用于读取,另一个用于写入,都作为二进制文件打开。或者您可以在确保它是二进制文件流之后写信给
stdout。请注意,DOS (Windows) 文件通常在每行的末尾有"\r\n";您只需要避免打印'\r'字符。如果你遇到'\r'后面没有'\n',或者'\n'前面没有'\r',你会怎么做,这是任何人的猜测。我可能只是将两者都映射到'\n。
标签: c file binary fopen dos2unix