首先以读写方式打开(r+ w+ a+都可以,不过要注意读写位置指针分别指向文件头、文件头、文件尾),一次读一个字符(此时读写位置指针指向此字节后面,判断后,若要转换,移动读写位置指针
fseek(fp,-1L,SEEK_CUR),再写入,由于在C中规定:以上述三种方式打开文件,既可读又可写,但在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek(),rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以要转换读写状态。
#include <stdio.h>
void main()
{
char ch;
int i=0;
FILE *fp;
fp=fopen("d:\\tc\\aaa.txt","r+");
if(!fp)
{
printf("can not open the file!\n");
exit(0);
}
while(!feof(fp))
{
ch=fgetc(fp);
if(ch>='a'&&ch<='z')
{ ch=ch-32;
fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/
fputc(ch,fp);
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
}
}
fclose(fp);
}
摘自《UNIX环境高级编程》:当以读和写类型打开一文件时,具有下列限制:
1)如果中间没有fflush、fseek、fsetpos或rewind,则在输出的后面不能直接跟随输入;
2)如果中间没有fseek、fsetpos或rewind,或者一个输出操作没有到达文件尾端,则在输入操作之后不能直接跟随输出;