关键字:UNIX C FILE 标准IO
环境:
UNIX C
问题:
如下CODE能从A.LOG读出第一行并写入B.txt,现在我想逐行读出写入应该怎么办?
#include <string.h>
#include <stdio.h>
int
main(int argc,char **argv)
{
FILE *p_f1,*p_f2;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fgets(buf,100,p_f1);
fputs(buf,p_f2);
fclose(p_f2);
fclose(p_f1);
}
问题点数:50、回复次数:10Top
1 楼wwwunix(木易)回复于 2003-09-02 16:51:29 得分 0
改成:
#include <string.h>
#include <stdio.h>
int
main(int argc,char **argv)
{
FILE *p_f1,*p_f2;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
while (fgets(buf,100,p_f1)!=NULL)
fputs(buf,p_f2);
fclose(p_f2);
fclose(p_f1);
}
Top
2 楼mzlau(阿飞)回复于 2003-09-02 16:57:42 得分 0
可以用fseek()和 ftell()来实现.
FILE *p_f1,*p_f2;
static long pos;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fseek (p_f1, pos, SEEK_SET);
while (fgets(buf,100,p_f1))
{
fputs(buf,p_f2);
pos = ftell (p_f1);
}
fclose(p_f2);
fclose(p_f1);
Top
3 楼mzlau(阿飞)回复于 2003-09-02 16:58:56 得分 5
Sorry, a mistake.
可以用fseek()和 ftell()来实现.
FILE *p_f1,*p_f2;
static long pos;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fseek (p_f1, pos, SEEK_SET);
while (fgets(buf,100,p_f1))
{
fputs(buf,p_f2);
pos = ftell (p_f1);
fseek (p_f1, pos, SEEK_SET);
}
fclose(p_f2);
fclose(p_f1);
Top
4 楼Smallest(常住了)回复于 2003-09-02 17:05:02 得分 0
THANKS!
能帮我解释一下中间的那两句代码吗?
我不大理解
while (fgets(buf,100,p_f1)!=NULL)
fputs(buf,p_f2);
Top
5 楼Smallest(常住了)回复于 2003-09-02 17:07:02 得分 0
还有fseek()和 ftell()我用的不大熟,阿飞解释一下先Top
6 楼Smallest(常住了)回复于 2003-09-02 17:09:46 得分 0
空格是不是NULL?
EOF是不是NULL?Top
7 楼wwwunix(木易)回复于 2003-09-02 17:43:20 得分 20
fgets():若成功则返回buf,若已处于文件尾端或出错则为NULL。
这两句就是没到p_f1的文件末尾就将读出的内容写入p_f2。Top
8 楼Smallest(常住了)回复于 2003-09-02 19:45:17 得分 0
好的,虽然没有解决我上面的两个问题,还是很感谢
明天结贴Top
9 楼snelgar(晓枫)回复于 2003-09-03 02:05:56 得分 25
int fseek(FILE *stream,long offset,int whence);
在流上重新定位文件结构的位置。fseek设置与流stream相联系的文件指针到新的位置,新位置与whence给定的文件位置的距离为offset字节。
whence的取值必须是0,1或2中的一个,分别代表在stdio.h中定义的三个符号常量:
0是SEEK_SET,是文件开始位置;
1是SEEK_CUR,是当前的指针位置;
2时SEEK_END,是文件末尾。
调用了fseek之后,在更新的文件位置上,下一个操作可以是输入;也可以是输出。成功地移动了指针时,fseek返回0;出错或失败时返回非0值。
long int ftell(FILE *stream);
返回流stream中当前文件指针位置。偏移量是文件开始算起的字节数。出错时返回-1L,是长整数的-1值。
#include <string.h>
#include <stdio.h>
int main(int argc,char **argv){
FILE *p_f1,*p_f2;
static long pos;
int rc=0;
char buf[100];
p_f1=fopen("./A.LOG","r");
if(p_f1==NULL)
{
printf("can't open f1");
return -1;
}
p_f2=fopen("./B.txt","w");
if(p_f2==NULL)
{ printf("can't open f2");
return -3;
}
if(fseek(p_f1, pos, SEEK_SET)!=0){//置文件指针于文件首
printf("fseek error!");
return -2;
}
while (fgets(buf,100,p_f1)!=NULL)
{
fputs(buf,p_f2);
pos = ftell(p_f1); //获得当前指针距文件首的偏移量
fseek(p_f1, pos, SEEK_SET);//置当前指针
}
fclose(p_f2);
fclose(p_f1);
return 0;
}Top
10 楼Smallest(常住了)回复于 2003-09-03 10:12:37 得分 0
THANKS!Top




