C 语言 边读 边写入文件

读入一个文本文件中的字符串,对给定的patten进行甄别并修改。
利用边甄别,边转换,边写入的办法实现
方法:
1. 把原文件改名,然后新建一个与原文件名相同的文件(目的文件),然后读取原文件,转换后写入目的文件
2. 最好同时对同一个文件进行读写操作,这样往原文件中写入数据会使原文件中数据丢失(除非是a方式打开)。如果非要这么做,那应先把文件中的数据全读到内存中(内存要能满足需要),然后在内存中对文件进行修改,再写回原文件。 
3.
以读写方式打开(r+ w+ a+都可以,不过要注意读写位置指针分别指向文件头、文件头、文件尾);
一次读一个字符(此时读写位置指针指向此字节后面,判断后,若要转换,移动读写位置指针fseek(fp,-1L,SEEK_CUR),再写入;
由于C规定:以上述三种方式打开文件,既可读又可写,但:
(1) 在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面;
(2) 在没有插入fseek()或rewind()或碰到文件结束的情况下,读不可以直接跟在写后面.
所以要转换读写状态。
                                       --------转自http://blog.chinaunix.net/space.php?uid=23915916&do=blog&id=2653234
View Code
#include <stdio.h>
/*
C 语言 边读 边写入文件
*/
int main()
{
char c;
FILE *p;
p = fopen("d:\\myurl.txt","r+");

while(!feof(p))
{
c = fgetc(p);
if(c >= 97 && c <= 122)
{
fseek(p,-1,SEEK_CUR); //读入一个需要改变的字符,位置是在其后. 所以需要将位置从当前位向前走一位
fputc(c - 32,p);
fseek(p,0,SEEK_CUR); //在改写完一个字符后,需要使用fseek来改变读写状态,这句没有做位置的移动
}
}
fclose(p);
/*
在读或者写的状态时. 只能通过fseek 或frewind来换换读写状态~
要不然.读的时候不能写. 写的时候不能读~
*/
}
posted @ 2011-12-27 20:15  easyfrog  阅读(2616)  评论(1编辑  收藏  举报