【发布时间】:2012-02-20 10:16:54
【问题描述】:
我编写了一个程序,它将文件作为输入,每当它找到长度 > 80 的行时,它都会在该文件中添加 \ 和 \n 以使其最大宽度为 80 个字符。
问题是我在长度超过 80 时使用 fseek 插入 \ 和 \n,因此它会覆盖该行中超过长度 80 的两个字符。有没有一种方法可以在不覆盖现有文本的情况下插入文本文本?
这是我的代码:-
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
FILE *fp1,*fp2;
int prev=0,now=0;
char ch;
int flag=0;
long cur;
fp1=fopen(argv[1],"r+");
if(fp1==NULL){
printf("Unable to open the file to read. Program will exit.");
exit(0);
}
else{
while((ch=fgetc(fp1))!=EOF){
if(ch!=' ' && ch!='\n'){
now=now+1;
}
else{
if(now>=80){
fseek(fp1,cur,SEEK_SET);
fputc('\\',fp1);
fputc('\n',fp1);
now=0;
continue;
}
if(ch=='\n'){
flag=0;
now=0;
continue;
}
else{
prev=now;
cur=ftell(fp1);
}
now=now+1;
}
}
}
fclose(fp1);
return 0;
}
要运行它,您需要执行以下操作:-
user@ubuntu$ cc xyz.c
user@ubuntu$ ./a.out file_to_check.txt
【问题讨论】:
-
不,没有办法将数据插入文件中间。您需要自己处理“转移”数据,和/或写入新文件。
-
@Mat:我会将您的评论标记为“不是评论”,因为这是一个答案:)
-
@ArmenTsirunyan:这个答案已经做了几十次了......