[英]How do I properly move a seek pointer in a file with stdio in C
我在弄亂C語言中的查找指針,我的練習是將一個數據庫(格式:ID NAME SURNAME AGE)寫入文本文件。 因此,一切正常(保存新數據等),但是我找不到如何刪除文本文件中的行的解決方案。
void cut_from_file(char* filename, int start, int stop) {
FILE *fp = fopen(filename, "w");
fpos_t position;
fseek(fp, 34, SEEK_SET);
fputs("Hello world", fp);
fclose (fp);
}
注意:我想以某種方式使其成為隨機訪問文件。
所以我的問題是我該如何移動文件指針,比如說向前移動34個字符並覆蓋該位置上的字符,而將位置0-33的字符保留原樣?
如果我嘗試像上面的測試函數那樣執行此操作,那么我會使用'/ 00'覆蓋偏移量0-33的所有內容,並在位置34處輸入Hello World。
fopen(filename,“ r +”)是答案,天哪,我很難搞清楚。
感謝大家 :)
使用SEEK_CUR
而不是SEEK_SET
從當前索引向前移動。 SEEK_SET
從文件開頭開始將您向前移動了34個字符。 同樣,打開文件時的“ w”將覆蓋其所有內容。
無法簡單地使文件的一部分消失。
我看到的兩個可能的解決方案是:
要從文件中刪除一行,您可以打開一個臨時文件,並將內容逐行寫入其中,然后跳過要刪除的行,稍后可以用該臨時文件替換原始文件。
(1)將最后一個條目移至要刪除的條目。 (2)調用truncate以縮短文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.