我想知道是否有可能使用frwite
在文件的開頭寫入數據。讓我更加確切地說,我使用fopen
打開一個文件,然後我寫入一些數據寫入。在關閉文件之前,我喜歡寫一些關於文件內容的小結。我想最好把這個總結放在文件的開頭。所以當我以後打開文件時,我可以先閱讀總結,然後閱讀數據。C fread fwrite在文件的開頭
實際上,只要我打開文件時可以先閱讀它,無論我放置摘要的位置如何。
我想知道是否有可能使用frwite
在文件的開頭寫入數據。讓我更加確切地說,我使用fopen
打開一個文件,然後我寫入一些數據寫入。在關閉文件之前,我喜歡寫一些關於文件內容的小結。我想最好把這個總結放在文件的開頭。所以當我以後打開文件時,我可以先閱讀總結,然後閱讀數據。C fread fwrite在文件的開頭
實際上,只要我打開文件時可以先閱讀它,無論我放置摘要的位置如何。
如果您在詢問您是否可以使用fwrite()
,putc()
,fprintf()
等將信息插入非空文件的開頭,答案是否定的,您不能這樣做。
您可以覆蓋數據或追加數據。
如果你想插入,你需要檢查你的OS API,看看是否有一個特殊的功能,如果沒有,你需要創建另一個文件,寫入摘要,然後寫入原始文件的內容。另一個選擇是手動移動數據以在文件的開頭釋放足夠的空間,因此可以在那裏寫入摘要。
如果您確實需要,您可以read a text file backwards。
無法在文件之前插入數據(無需重寫整個文件)。
它是可能覆蓋文件中任何點的一些字節。爲了實現您的需求,原始文件必須保留一些字節,可能在開始—處保留—以供稍後覆蓋。
FILE *f = fopen ("thefile", "r+"); // opens for read and write, positioned at beginning
if (!f) error_message();
size_t n = fwrite ("newdata", 1, 7, f); // overwrite first 7 bytes
if (n != 7) error_message();
fclose (f);
耶!事情是,我不知道我的總結的大小......它會一直改變......所以我不能保留一些字節 – PinkFloyd 2013-02-26 09:23:56
好的謝謝,這就是我認爲......但是有沒有辦法從文件結尾開始fread文件呢?我可以在最後寫出我的總結...... – PinkFloyd 2013-02-26 09:22:23
用'fseek()'設置文件位置,然後在那裏執行'fread()'或'fwrite()'。你需要打開文件爲二進制文件,而不是'fseek()'的文本才能工作。另外,請注意如何確定文件大小,請參閱我的答案中的'fsize()'。 – 2013-02-26 09:24:34
太棒了!謝謝你的幫助 !這是我第一次在這個論壇上發佈內容,你的答案的速度是驚人的! – PinkFloyd 2013-02-26 09:27:22