2010-03-12 143 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 

我實際使用的代碼(一些修改後)一式三份包含每個元音,在給定的文件的話字符。

相關問題