Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Append to the end of a file in C

Tags:

c

file

append

fseek

I'm trying to append the contents of a file myfile.txt to the end of a second file myfile2.txt in c. I can copy the contents, but I can't find a way to append. Here's my code:

FILE *pFile; FILE *pFile2; char buffer[256];  pFile=fopen("myfile.txt", "r"); pFile2=fopen("myfile2.txt", r+); if(pFile==NULL) {     perror("Error opening file."); } else {     while(!feof(pFile)) {         if(fgets(buffer, 100, pFile) != NULL) {         fseek(pFile2, -100, SEEK_END);         fprintf(pFile2, buffer);     } } fclose(pFile); fclose(pFile2); 

I don't think I'm using fseek correctly, but what I'm trying to do is call fseek to put the pointer at the end of the file, then write at the location of that pointer, instead of at the beginning of the file. Is this the right approach?

like image 604
Sonofblip Avatar asked Oct 17 '13 14:10

Sonofblip


People also ask

What is append mode in C?

Append mode is used to append or add data to the existing data of file(if any). Hence, when you open a file in Append(a) mode, the cursor is positioned at the end of the present data in the file.


2 Answers

Open with append:

pFile2 = fopen("myfile2.txt", "a"); 

then just write to pFile2, no need to fseek().

like image 122
cdarke Avatar answered Sep 28 '22 00:09

cdarke


Following the documentation of fopen:

``a'' Open for writing. The file is created if it does not exist. The stream is positioned at the end of the file. Subsequent writes to the file will always end up at the then cur- rent end of file, irrespective of any intervening fseek(3) or similar.

So if you pFile2=fopen("myfile2.txt", "a"); the stream is positioned at the end to append automatically. just do:

FILE *pFile; FILE *pFile2; char buffer[256];  pFile=fopen("myfile.txt", "r"); pFile2=fopen("myfile2.txt", "a"); if(pFile==NULL) {     perror("Error opening file."); } else {     while(fgets(buffer, sizeof(buffer), pFile)) {         fprintf(pFile2, "%s", buffer);     } } fclose(pFile); fclose(pFile2); 
like image 23
Sergey L. Avatar answered Sep 27 '22 23:09

Sergey L.