作者jenallen (新庄男)
看板LinuxDev
标题Re: [问题] I/O in C
时间Wed Nov 29 11:36:38 2006
※ 引述《dozer (rezod)》之铭言:
: 想要在一个用fopen打开的档案中
: 插入一行字
: 比如说 原本的档案长这样
: first line
: second line
: @
: lastline
: 想要在@前面加入一行 third line, i.e.
: first line
: second line
: third line
: @
: lastline
: 有没有除了全部读到buffer里面 再重新写入之外的方法哩
: 因为那样就不能处理很大的档案了...
一次读一行?不过这样file I/O会很多...如下:
#include <stdio.h>
#include <stdlib.h>
//回传此行几个char,包括'\n'
static int getline( char *const str, FILE *fp)
{
int i = 1,c = 0;
while( (c = fgetc(fp)) != '\n' && c != EOF ){
str[(i++) -1] = c;
}
str[i - 1] = '\0';
return c == EOF ? 0:i;
}
int main()
{
FILE *fp = fopen("ooxx.txt","rt");
int i = 1;
while( i ){
char str[1024];
i = getline(str,fp);
if( str[0] == '@' ){
puts("Hello");
}
puts(str);
}
return 0;
}
然後再将输出redirect到档案即可。为了避免过多的file I/O,可以多读几行
再做一次输出。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.110.96