2010-03-12 95 views

回答

7

没有简单的方法。你已经手动完成了。例如:

  1. 阅读你想之前插入到内存块
  2. 寻求着新的位置
  3. 写块你刚才读的新位置
  4. 寻求回到你想插入
  5. 写入新数据。
+0

谢谢!所以我必须使用“fopen(”1.txt“,”w“);”然后fseek? :)据我所知,对于我的问题,答案是肯定的。 – 2010-03-12 07:24:45

+2

@Infinity:使用'fopen(“1.txt”,“r +”)'打开阅读*和*写作。模式'“w”覆盖之前可能存在的任何文件,留下一个空文件。 – 2010-03-12 07:25:34

+0

好的,谢谢:) – 2010-03-12 07:29:40

2

使用fseek函数将文件指针移动到文件的相应位置,然后您可以在那里执行写操作。但是,为此,您应该知道从文件末尾开始有多少个字节,或者您想要写入的首选区域的起始位置。

+0

也谢谢你。 – 2010-03-12 07:25:01

6

正如其他人已经告诉过你的,你必须手动完成,并使用fseek来到你必须插入或添加字符的地方。您可以通过执行以下操作轻松地在中间添加新字符:

  1. 转到文件的最后一个字节,并存储文件的旧文件大小。
  2. 转到你想要插入新字符的位置(说这是位置):fread(旧文件大小 - 位置)字节,并将它们存储在缓冲区中。
  3. fseek再次定位。
  4. fwrite你的新角色。
  5. fwrite您先前读取的缓冲区。

如果你想删除中间的字符,那么这是更棘手的。其实你不能缩短文件。你有两种可能性:在第一个,你刚才

  1. 打开文件和读取文件跳过字符要删除,并将它们存储在缓冲区
  2. 关闭并重新打开该文件“b”,所以其内容被删除,
  3. 写入缓冲区并关闭文件。

在第二个可能性,您:

  1. 读取到未来要删除的那些的缓冲字符。
  2. fseek以你想删除的字符开头
  3. fwrite缓冲区。
  4. 修剪文件的其余部分。

第四点是“棘手”,因为没有标准(便携)的方式来做到这一点。一种可能是使用操作系统系统调用来截断文件。另一种更简单的可能性是在第4点将EOF写入文件。该文件可能会大于它应该是的,但它会起作用。

+0

非常感谢你,我想你对此有更多的了解。我们可以在别的地方谈谈这个吗? – 2010-03-13 17:22:40

+0

我对搜索文件中文本位置的主题感兴趣。也许有一个好方法,还是我必须由charachter测试charachter? – 2010-03-13 17:27:03

+0

在文本文件中搜索是的,基本上是逐字测试的问题。但是,这是另一个完全不同的主题:例如,您可以获得正则表达式的帮助。 – Baltasarq 2010-03-15 09:17:39

1

考虑到Baltasarq发布了什么,我写了以下几行。你需要知道的位置,你要插入

long Fin; 
long lSize; 
fseek(fd, 0L, SEEK_END); 
Fin = ftell(fd);//I get the old file size 
fseek(fd, position, SEEK_SET);//you should have declared and initialized "position" 
char * buffer; 
lSize = Fin - position;//lenght from where you want to insert the chars and 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);//you should know what you want to write (word) and it is a char pointer 
fputs(buffer, fd);//fwrite the buffer 

我实际使用的代码(一些修改后)一式三份包含每个元音,在给定的文件的话字符。

相关问题