user-0 提问: 读取文件，怎么进行追加？

回复:
user: user-0
content: 引用 8 楼 自信男孩的回复:[quote=引用 6 楼 风吟xqy 的回复:] [quote=引用 4 楼 自信男孩的回复:]打开方式就不能是a+了，因为这样你是读取不到数据的，因为此时文件指针是指向文件末尾的。  解决办法是可读可写的形式打开文件，比如"r+"，然后把所有数据读取到内存，此时文件指针正好指向文件末尾，然后把小写转大写直接往文件里写就是了。最后关闭文件。  有一点需要明白，读取文件，将数据都读取到内存后，文件指针此时正好指向文件末尾。 老哥，还是写不成。[/quote] 发你的代码出来，是不是你的逻辑问题或者读文件时就出错了。[/quote] 写对了，逻辑出问题了

user: user-1
content: 打开方式改成"a+"就好了。

user: user-2
content: 引用 6 楼 风吟xqy 的回复:[quote=引用 4 楼 自信男孩的回复:]打开方式就不能是a+了，因为这样你是读取不到数据的，因为此时文件指针是指向文件末尾的。  解决办法是可读可写的形式打开文件，比如"r+"，然后把所有数据读取到内存，此时文件指针正好指向文件末尾，然后把小写转大写直接往文件里写就是了。最后关闭文件。  有一点需要明白，读取文件，将数据都读取到内存后，文件指针此时正好指向文件末尾。 老哥，还是写不成。[/quote] 发你的代码出来，是不是你的逻辑问题或者读文件时就出错了。

user: user-0
content: #include <stdio.h> #include <stdlib.h> #include <string.h> int main () {     FILE *fp1,*fp2;     char ch;     int a=0;     if ((fp1=fopen("alpha.txt","r"))==NULL)     {         printf("File open error!\n");         exit(0);     }     if((fp2=fopen("alpha.txt","a"))==NULL) 	{	 		printf("打开文件dest.txt失败!\n"); 		exit(0); 	}     while (!feof(fp1))     {         ch=fgetc(fp1);       //从fp1所指的文件中读取一个字符         if (ch !=EOF)         {             if (ch>='a'&&ch<='z'&&ch!='\n')             {                 ch -=32;                 fputc(ch,fp2);             }         }              }     if (fclose(fp1))                                 //关闭文件     {         printf("Can not close the file!\n");         exit(0);     }     if (fclose(fp2))                                 //关闭文件     {         printf("Can not close the file!\n");         exit(0);     }     return 0; }

user: user-0
content: 引用 11 楼 Tryagain2006 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h> int main () {     FILE *fp1, *fp2;     int ch;     int a=0;     if ((fp1=fopen("d:alpha.txt", "r+"))==NULL)     {         printf("File1 open error!\n");         exit(0);     }     if ((fp2=fopen("d:temp.txt", "w"))==NULL)     {         printf("File2 open error!\n");         exit(0);     }     while ( !feof(fp1) )     {            if ( (ch= fgetc(fp1)) != EOF )	//从fp1所指的文件中读取一个字符         {             if ( ch>='a' && ch<='z' )             {	ch -= 'a'-'A';             }             if (ch=='\n')             {	a++;             }             fputc(ch, fp2);				//写入文件2          }     }     printf("\na=%d",a);      freopen("d:/chensy/2019c/alpha.txt", "a+", fp1);	//重新打开文件1  	freopen("d:/chensy/2019c/temp.txt", "r",fp2);		//重新打开文件2     while ( !feof(fp2) )     {         ch = fgetc(fp2);       	//从fp2所指的文件中读取一个字符         if ( ch != EOF )         {	fputc(ch, fp1);		//追加到文件1中          } 	}     if ( fclose(fp1) )                               //关闭文件1     {         printf("Can not close the file1!\n");         exit(0);     }     if ( fclose(fp2) )                                 //关闭文件2     {         printf("Can not close the file2!\n");         exit(0);     }     return 0; }  请看看这个程序如何。就是这个feel，谢谢

user: user-3
content: #include <stdio.h> #include <stdlib.h> #include <string.h> int main () {     FILE *fp1, *fp2;     int ch;     int a=0;     if ((fp1=fopen("d:alpha.txt", "r+"))==NULL)     {         printf("File1 open error!\n");         exit(0);     }     if ((fp2=fopen("d:temp.txt", "w"))==NULL)     {         printf("File2 open error!\n");         exit(0);     }     while ( !feof(fp1) )     {            if ( (ch= fgetc(fp1)) != EOF )	//从fp1所指的文件中读取一个字符         {             if ( ch>='a' && ch<='z' )             {	ch -= 'a'-'A';             }             if (ch=='\n')             {	a++;             }             fputc(ch, fp2);				//写入文件2          }     }     printf("\na=%d",a);      freopen("d:/chensy/2019c/alpha.txt", "a+", fp1);	//重新打开文件1  	freopen("d:/chensy/2019c/temp.txt", "r",fp2);		//重新打开文件2     while ( !feof(fp2) )     {         ch = fgetc(fp2);       	//从fp2所指的文件中读取一个字符         if ( ch != EOF )         {	fputc(ch, fp1);		//追加到文件1中          } 	}     if ( fclose(fp1) )                               //关闭文件1     {         printf("Can not close the file1!\n");         exit(0);     }     if ( fclose(fp2) )                                 //关闭文件2     {         printf("Can not close the file2!\n");         exit(0);     }     return 0; }  请看看这个程序如何。

user: user-0
content: 引用 1 楼 user-5的回复:那就先读取文件大小，然后一点一点读文件，找到小写字母，然后转成大写字母追加到文本的后面 大佬，写不成

user: user-0
content: 引用 4 楼 自信男孩的回复:打开方式就不能是a+了，因为这样你是读取不到数据的，因为此时文件指针是指向文件末尾的。  解决办法是可读可写的形式打开文件，比如"r+"，然后把所有数据读取到内存，此时文件指针正好指向文件末尾，然后把小写转大写直接往文件里写就是了。最后关闭文件。  有一点需要明白，读取文件，将数据都读取到内存后，文件指针此时正好指向文件末尾。 老哥，还是写不成。

user: user-2
content: 打开方式就不能是a+了，因为这样你是读取不到数据的，因为此时文件指针是指向文件末尾的。  解决办法是可读可写的形式打开文件，比如"r+"，然后把所有数据读取到内存，此时文件指针正好指向文件末尾，然后把小写转大写直接往文件里写就是了。最后关闭文件。  有一点需要明白，读取文件，将数据都读取到内存后，文件指针此时正好指向文件末尾。

user: user-0
content: 引用 2 楼 Simple-Soft的回复:你原文件内容是啥？你代码中好像也没有写文件啊 原文件就是adfghjjkl

user: user-0
content: 引用 4 楼 自信男孩的回复:打开方式就不能是a+了，因为这样你是读取不到数据的，因为此时文件指针是指向文件末尾的。  解决办法是可读可写的形式打开文件，比如"r+"，然后把所有数据读取到内存，此时文件指针正好指向文件末尾，然后把小写转大写直接往文件里写就是了。最后关闭文件。  有一点需要明白，读取文件，将数据都读取到内存后，文件指针此时正好指向文件末尾。 好的，我试一试

user: user-4
content: 你原文件内容是啥？你代码中好像也没有写文件啊

user: user-5
content: 那就先读取文件大小，然后一点一点读文件，找到小写字母，然后转成大写字母追加到文本的后面