Reputation: 2302
I am populating a short dictionary from my basic C program using the following code :
void main () {
FILE *fp;
fp = fopen("c:\\CTEMP\\Dictionary2.txt", "w+");
fprintf(fp, Word to Dictionary");
However I would also wish to remove certain words which I do not longer wish to be in the dictionary. I did some research and I know that
" You can't remove content from a file and have the remaining content shifted down. You can only append, truncate or overwrite.
Your best option is to read the file in to memory, process it in memory and then write it back to disk"
How can I create a new file without the word I want to remove ?
Thanks
Upvotes: 2
Views: 1007
Reputation: 2302
I used the following code :
printf("Enter file name: ");
scanf("%s", filename);
//open file in read mode
fileptr1 = fopen("c:\\CTEMP\\Dictionary.txt", "r");
ch = getc(fileptr1);
while (ch != EOF)
{
printf("%c", ch);
ch = getc(fileptr1);
}
//rewind
rewind(fileptr1);
printf(" \n Enter line number of the line to be deleted:");
scanf("%d", &delete_line);
//open new file in write mode
fileptr2 = fopen("replica.c", "w");
ch = getc(fileptr1);
while (ch != EOF)
{
ch = getc(fileptr1);
if (ch == '\n')
{
temp++;
}
//except the line to be deleted
if (temp != delete_line)
{
//copy all lines in file replica.c
putc(ch, fileptr2);
}
}
fclose(fileptr1);
fclose(fileptr2);
remove("c:\\CTEMP\\Dictionary.txt");
//rename the file replica.c to original name
rename("replica.c", "c:\\CTEMP\\Dictionary.txt");
printf("\n The contents of file after being modified are as follows:\n");
fileptr1 = fopen("c:\\CTEMP\\Dictionary.txt", "r");
ch = getc(fileptr1);
while (ch != EOF)
{
printf("%c", ch);
ch = getc(fileptr1);
}
fclose(fileptr1);
scanf_s("%d");
return 0;
}
Upvotes: 0
Reputation: 146
If the manipulation that you need to do is much more complex then you can literally "read it into memory" using mmap(), but that is a more advanced technique; you need to treat the file as a byte array with no zero terminator and there are lots of ways to mess that up.
Upvotes: 5