我想在打開的文件中更改我的光標位置。跳轉到特定行的末尾
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
,沒有工作。
任何幫助將不勝感激。
我想在打開的文件中更改我的光標位置。跳轉到特定行的末尾
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
,沒有工作。
任何幫助將不勝感激。
要查找的位置在文件中,使用fseek()
。在C/C++文件處理中沒有關於行開始和/或結束位置的知識,除了有「行尾標記」,換行符('\n'
)之外。
知道在哪裏線開始或結束,你必須跟蹤自己(例如通過用線fgets()
與fscanf()
或一行元素讀通過字符的文件字符與fgetc()
,元素,當你發現某些重要的部分,使用ftell()
以保存當前位置
請注意,雖然看起來fgets()
知道行,但實際上它只是從您在文件中的位置開始讀取,而當字符是換行符時,它會停止。關於「這行是40個字符長」
你必須fseek
到文件的開頭,然後用字符閱讀getc
字符,直到你找到了第三個換行符,然後ungetc
(只能unget一個字符)。但請注意,您在不能在之後插入文字,而不覆蓋第四行。
(在一個文件中的中間插入通常由複製起始部分,在寫入新的數據,然後複製的最後部分執行。)
感謝您的最後一個提示。我現在看到這個問題,我有'fseek'工作。你有任何代碼可以解決這個問題嗎? – adamlazz 2013-05-07 19:57:24
只要你知道第三行,'fseek'應該可以做到。你能告訴我們你使用'fseek()'不能使用嗎? – 2013-05-07 14:51:58
感謝您的迴應。我發現我應該用r +模式打開文件。現在'fseek(fp,2,SEEK_SET);'會工作。我該如何尋找最後的線?超量EOL將開始覆蓋下一行。 – adamlazz 2013-05-07 15:09:49
你需要知道線的末端是什麼位置。這是無可替代的。 – 2013-05-07 15:11:05