tags:

views:

335

answers:

3

I am trying to figure out how to write a new line of text at the beginning of a file (a header). I know I can open the file, or seek to the beginning of a file, but if I write with that, it will overwrite what's there. Do I have to write a new file and then write the other data to it line by line, or is there a better way?

Example file:

1, 01/01/09, somedata, foo, bar
2, 01/02/09, somedata, foo, bar
3, 01/03/09, somedata, foo, bar

And I want to end up with

3, 1-3, 01/04/09
1, 01/01/09, somedata, foo, bar
2, 01/02/09, somedata, foo, bar
3, 01/03/09, somedata, foo, bar

EDIT:

This is what I ended up doing:

FILE *source;
FILE *output;
char buffer[4096];
size_t bytesRead;

memset(buffer, 0, sizeof(buffer);

source = fopen("sourcefile.txt", "r");
output = fopen("output.txt", "w+");

fprintf(output, "my header text\n");

while(!feof(source))
{
  bytesRead = fread(&buffer, 1, sizeof(buffer), source);
  fwrite(&buffer, 1, bytesRead, output);
}

fprintf(output, "my footer text");

fclose(source);
fclose(output);

remove(source);
rename("output.txt", "source.txt");
A: 

You have to open a new file and write all over again.

Tiago
+6  A: 

You will have to rewrite the whole file, but that doesn't necessarily mean you have to read and write the original data line-by-line. Reading by lines is relatively slow, so if the file is small enough to fit in memory, read it all in one big chunk (or in large sized blocks) and then write it back after writing your new data.

Bryan Oakley
+1  A: 

Well, probably the very easiest thing is to notice that what you want to do is the equivalent of the unix cat command. If you're on unix, you could just call it from within c. Or you could read the source in gnu textutils.

But in any case all of these solutions do just rewrite the file!

Andrew Jaffe