[英]C: Write to a specific line in the text file without searching
你好我有文本文件:
14
5 4
45 854
14
4
47 5
我需要將文本寫到特定行。 例如第4行(我是否要附加文本還是重寫整行都沒有關系):
14
5 4
45 854
14 new_text
4
47 5
我發現了功能fseek()。 但是在文檔中寫的
fseek(文件指針,偏移量,位置);
“偏移量指定了要從指定位置移出的位置數(字節)。”
但是我不知道被咬的次數。 我只知道行數。 怎么做? 謝謝
您無法做到這一點,(文本)文件不可行尋址。
另外,您不能在文件中間插入數據。
最好的方法是“假脫機”到新文件,即逐行讀取輸入,然后將其寫入到新文件即輸出。 然后,您可以輕松地跟蹤您所在的行,並執行所需的任何操作。
我將假設您將對單個文件執行多次操作,這樣您最好為每個換行符的位置編制索引,例如可以使用如下函數:
long *LinePosFind(int FileDes)
{
long * LinePosArr = malloc(500 * sizeof(long));
char TmpChar;
long LinesRead = 0;
long CharsRead = 0;
while(1 == read(FileDes, &TmpChar, 1))
{
if (!(LinesRead % 500)
{
LinePosArr = realloc(LinePosArr, (LinesRead + 500) * sizeof(long));
}
if (TmpChar == '\n')
{
LinePosArr[LinesRead++] = CharsRead;
}
CharsRead++;
}
return LinePosArr;
}
然后,您可以保存所有換行符的索引以供重復使用。
之后,您可以像這樣使用它:
long *LineIndex = LinePosFind(FileDes);
long FourthLine = LineIndex[3];
注意:我沒有檢查過這段代碼,只是從頭開始編寫,因此可能需要修復。此外,如果在生產環境中使用該代碼,則應添加一些錯誤檢查malloc並讀取和重新分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.