Reading a write file to the same file?

I managed to open the file and read when writing to another file with var=fopen(file,"r") / "w" , but even with r + or w + moded I can not open the file and change its contents.

Imagine the following:

 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); } 

The code works, no errors, no warnings, only the problem: it erases the contents in the file, if I use it like this, BUT it works:

 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); } 

Impeccable! How to open a file, read char to char and decide if I want to change char or not?

+6
source share
3 answers

You need to intervene in the file positioning function between output and input if no EOF was found at the input.

This works for me:

 #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; } 
+8
source

Open the file with the 'a +' option to add the file:

 fopen ("DNAexample.txt","a+"); 

w + erases your file if it exists or creates a new one if the specified one does not exist. a + will open an existing file and you can edit it.

You can read more about working with files here: http://www.functionx.com/cppbcb/cfileprocessing.htm

+1
source

Open file in upload mode

 original_open = fopen (original,"a+"); 
0
source

Source: https://habr.com/ru/post/886685/


All Articles