我已经设法打开一个文件并在使用var = fopen(文件,“r”)/“w”写入另一个文件时读取,但即使使用r或w模式,我也无法打开文件并更改其内容.
想象一下:
int formatacao (char original[]){/*se a cadeia nao tiver escrita em maiusculas,esta funçao vai alteralas para tal*/ int val1; FILE * original_open; original_open = fopen (original,"r+"); if (original_open==0){ printf ("ficheiro %c 1.",original); } while ((val1=fgetc(original_open))!=EOF){ if (val1>='a'&&val1<='z'&&val1){ fputc(val1-32,original_open); } else fputc(val1,original_open); } fclose (original_open); return (0); }
代码工作,没有错误,没有警告,唯一的问题是:如果我像这样使用它,它会删除文件中的内容但是这样可行:
int main (){ int val1,val2,nr=0; FILE* fp1; FILE* fp2; fp1=fopen ("DNAexample.txt","r"); fp2=fopen ("DNAexample1.txt","w"); if (fp1==0){ printf ("EPIC FAIL no 1.\n"); } while ((val1=fgetc(fp1))!=EOF){ if (val1>='a'&&val1<='z'&&val1){ fputc(val1-32,fp2); } else fputc(val1,fp2); } fclose (fp1); fclose (fp2); return (0); }
完美!如何打开文件,通过char读取char并确定是否要更改char?
解决方法
除非在输入中找到EOF,否则您需要在输出和输入之间插入文件定位功能.
这对我有用:
#include <stdio.h> int formatacao (char *original) { int val1; FILE *original_open; int write_at,read_at; original_open = fopen(original,"r+"); if (original_open == 0) { printf("ficheiro %s\n",original); } write_at = read_at = 0; while ((val1 = fgetc(original_open)) != EOF) { read_at = ftell(original_open); fseek(original_open,write_at,SEEK_SET); if (('a' <= val1) && (val1 <= 'z')) { fputc(val1 - 32,original_open); } else { fputc(val1,original_open); } write_at = ftell(original_open); fseek(original_open,read_at,SEEK_SET); } fclose(original_open); return (0); } int main(void) { formatacao("5787867.txt"); return 0; }