有没有办法在读取文本文件后从文本文件中删除第一个字符?

时间:2013-09-14 12:43:57

标签: c file text character

有没有办法在阅读后删除文本文件中的第一个字符? 我希望程序从文本文件中读取字符,一旦使用它,它应该删除从文本文件中读取的当前字符。

3 个答案:

答案 0 :(得分:3)

您不能在开头插入,在开头删除,在中间插入,在文件中间删除而不重写它。最后附加是可能的。有时可以在最后删除(取决于平台)。

答案 1 :(得分:0)

根据您的需求和系统,您可能会对pipes感兴趣。至少他们能够做你想做的事。虽然管道是用于进程间通信的。

对于Linux外观here

对于Windows,请查看here

答案 2 :(得分:0)

您无法从文件中删除字符,您可以修改它们并从逻辑上说数据已被删除。

我们无法删除文件内容。您可以在要删除文件中的字符的位置添加*(或文件中没有的任何内容),而不是删除。

在更多删除后,您的文件中有很多*。只需将您文件中*以外的整个文件复制到新文件

删除旧文件 将新文件重命名为旧文件

您只需将删除部分后的数据复制到要删除的部分上。

请参阅此代码:

#include <stdio.h>
#include <stdlib.h>

int main(){

FILE *fp = fopen("file.txt","r+"); /* Open for reading  and writing */
FILE *fp1=fopen("new.txt","a+");
FILE *fp2=fopen("new2.txt","a+");

char ch;
int i=0,n;

printf("Enter how many characters do you want to delete from file\n ");
scanf("%d",&n);
while(((ch = fgetc(fp)) != EOF )&&( i<n))
{
fseek(fp,-1,SEEK_CUR);
fputc('*',fp);
i++;
}

printf("file after delete\n");
rewind(fp);
while((ch = fgetc(fp)) != EOF )
{
if(ch!='*')
printf("%c",ch);
}

printf("copy to another file after delete\n");
rewind(fp);
while((ch = fgetc(fp)) != EOF )
{
if(ch!='*')
fputc(ch,fp1);
}


printf("file after delete\n");
rewind(fp);
while((ch = fgetc(fp)) != EOF )
{
if(ch!='*')
printf("%c",ch);
}


printf("delete first n characters from new.txt delete\n");

printf("Enter how many characters do you want to delete from file\n ");
scanf("%d",&n);
i=0;
rewind(fp1);
while((ch = fgetc(fp1)) != EOF )
{
if(i>n)
fputc("%c",ch);
i++;
}



printf("\n\n");
fclose(fp);
fclose(fp1);
fclose(fp2);
//use rename() and remove() functions to delete old file and then rename new file as old one.
return 0;
}