2013-05-07 71 views
0

我想在打開的文件中更改我的光標位置。跳轉到特定行的末尾

fp = fopen("dirty", "a+"); 
fprintf(fp, "Text at end of file"); 

// seek to end of third line (eg.) 

fprintf(fp, "Text at end of third line"); 

我試圖關閉並重新打開文件,fseek,沒有工作。

任何幫助將不勝感激。

+2

只要你知道第三行,'fseek'應該可以做到。你能告訴我們你使用'fseek()'不能使用嗎? – 2013-05-07 14:51:58

+0

感謝您的迴應。我發現我應該用r +模式打開文件。現在'fseek(fp,2,SEEK_SET);'會工作。我該如何尋找最後的線?超量EOL將開始覆蓋下一行。 – adamlazz 2013-05-07 15:09:49

+0

你需要知道線的末端是什麼位置。這是無可替代的。 – 2013-05-07 15:11:05

回答

2

要查找的位置在文件中,使用fseek()。在C/C++文件處理中沒有關於行開始和/或結束位置的知識,除了有「行尾標記」,換行符('\n')之外。

知道在哪裏線開始或結束,你必須跟蹤自己(例如通過用線fgets()fscanf()或一行元素讀通過字符的文件字符與fgetc(),元素,當你發現某些重要的部分,使用ftell()以保存當前位置

請注意,雖然看起來fgets()知道行,但實際上它只是從您在文件中的位置開始讀取,而當字符是換行符時,它會停止。關於「這行是40個字符長」

2

你必須fseek到文件的開頭,然後用字符閱讀getc字符,直到你找到了第三個換行符,然後ungetc(只能unget一個字符)。但請注意,您在不能在之後插入文字,而不覆蓋第四行。

(在一個文件中的中間插入通常由複製起始部分,在寫入新的數據,然後複製的最後部分執行。)

+0

感謝您的最後一個提示。我現在看到這個問題,我有'fseek'工作。你有任何代碼可以解決這個問題嗎? – adamlazz 2013-05-07 19:57:24