【发布时间】:2010-03-12 07:14:28
【问题描述】:
我想在文件中间插入和删除一些字符。
fopen() 和 fdopen() 只允许在末尾追加。
是否有任何允许这些操作的简单方法或现有库?
【问题讨论】:
-
推荐使用插入数据创建新文件。完成后,重命名并删除原件。
我想在文件中间插入和删除一些字符。
fopen() 和 fdopen() 只允许在末尾追加。
是否有任何允许这些操作的简单方法或现有库?
【问题讨论】:
正如其他人已经告诉您的那样,您必须手动执行此操作,并使用 fseek 才能到达您必须插入或添加字符的位置。您可以通过执行以下操作轻松地在中间添加新字符:
如果要删除中间的字符,那就比较麻烦了。实际上,您不能使文件更短。你有两种可能:在第一种中,你只是
在第二种可能性中,你:
第四点是“棘手的”,因为没有标准(便携式)方法可以做到这一点。一种可能性是使用操作系统系统调用来截断文件。另一种更简单的可能性是只在第 4 点 fwrite EOF。文件可能会比它应该的大,但它会解决问题。
【讨论】:
没有简单的方法。你必须手动完成。例如:
【讨论】:
fopen("1.txt", "r+"),它打开用于读取和写入。模式"w" 覆盖之前可能存在的任何文件,留下一个空文件。
使用fseek 函数将文件指针移动到文件的适当位置,然后您可以在那里执行写操作。但是,为此您应该知道您首选的写入区域是从文件末尾或开头开始的字节数。
【讨论】:
考虑到 Baltasarq 发布的内容,我写了以下几行。您需要知道要插入字符的位置
long Fin;
long lSize;
fseek(fd, 0L, SEEK_END);
Fin = ftell(fd);//get the old file size
fseek(fd, position, SEEK_SET);//"position" must be declared and initialized
char * buffer;
lSize = Fin - position;//length from where you want to insert the chars to the eof
buffer = (char*) malloc(sizeof(char) * lSize);
size_t result = fread(buffer, 1, lSize, fd);//fread (Fin - position) into buffer
fseek(fd, position, SEEK_SET);//fseek to position
fputs(word, fd);//word is a char pointer that contains the text to be inserted
fputs(buffer, fd);//fwrite the buffer
我实际上使用这段代码(经过一些修改)将给定文件中包含每个元音的单词一式三份。
【讨论】: