簡體   English   中英

如何在C中使用stdio在文件中正確移動查找指針

[英]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. 使用一個額外的字節(和固定寬度的記錄!)來指示條目是“已刪除”還是“未刪除”。 這意味着刪除一條記錄是一次寫入操作,然后您便知道可以將空間重新用於另一條記錄。

要從文件中刪除一行,您可以打開一個臨時文件,並將內容逐行寫入其中,然后跳過要刪除的行,稍后可以用該臨時文件替換原始文件。

(1)將最后一個條目移至要刪除的條目。 (2)調用truncate以縮短文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM