2012-07-26 102 views
1

修改文件時,是否總是需要重寫整個文件,還是有可能找到並更改文件的一小部分,而不必重寫整個文件?修改文件時,是否需要重寫整個文件?

+0

那要看情況。你想如何修改文件? – 2012-07-26 04:52:27

+0

那麼,對於我現在正在做的事情,我可能需要重寫整個文件,因爲我有一個搜索和替換例程,用於在整個文件中刪除字符。但是,我只是想知道是否可以修改文件的一部分而不用實際重寫整個文件。 – 2012-07-26 04:56:04

+0

也取決於文件系統。 – 2012-07-26 04:56:41

回答

4

如果您沒有插入或刪除數據,則不需要重寫該文件。您將用新值替換現有字節,或附加到文件。

如果您需要插入或刪除,您只需從該點開始重寫文件。唯一需要重寫整個文件的時間是在開始時插入字節。

可以同時打開具有讀寫權限的文件。這樣,您可以搜索文件,查找您想查找的任何文件,一旦您擁有可以尋求的位置(從內存中,寫指針與讀指針分開),並將數據覆蓋到您心中的內容=)

+0

正如我懷疑的那樣,在我的場景中重寫整個文件可能更有意義,因爲我在整個刪除角色,但這很好理解。謝謝! – 2012-07-26 05:13:20

3

如果你不改變數據長度的長度,你總是可以找到文件中的適當位置,並寫入一組新的字節。這取代原來在那裏的任何字節。

0

有兩種可能的方式:

  • 當您使用StreamWriter sw = new StreamWriter它將從文件中刪除數據。
  • 要僅更改,可以將文件數據存儲在List<string>中。這對我的作品好看:

    List<string> lines_list = new List<string>(); 
    int file_l = 0 
    
    StreamReader sr_temp = new StreamReader(_path); 
    string line; 
    
    while ((line = sr_temp.ReadLine()) != null) 
    { 
        lines_list.Add(line); 
        file_l++; 
    } 
    
    sr_temp.Close(); 
    StreamWriter sw = new StreamWriter(_path); 
    for (int i = 0; i < file_l; i++) 
    { 
         sw.WriteLine(lines_list[i]); 
    } 
    
    //here you add some data 
    sw.Close(); 
    
+0

謝謝John,但問題是這些文件非常大,所以我正在尋找一些不需要我一次將整個文件加載到內存中的東西。另外,即使你沒有修改數據,你仍然在重寫它,這是我想知道我是否可以避免。 – 2012-07-26 05:08:42

+0

啊,好的。感謝您的反饋。 :) – 2012-07-26 05:10:08

相關問題