2009-11-02 56 views
2

好一個文本文件,所以我有示例內容如下管理在C#

line1with some random stuff here 
line 2 with something very completely different 
line3 has some other neat stuff 
line4 is the last line in the textfile 

一個文本文件,我需要得到該文本文件,刪除一行,並保留文件的其餘部分完好無損。所以如果我想刪除第2行,id想要這樣的結果:

line1with some random stuff here 
line3 has some other neat stuff 
line4 is the last line in the textfile 

通知我不想在行之間留下任何空格。

〜代碼示例請!即使這是不可能的,任何幫助將不勝感激! :)

+0

刪除一行,並將文件保留爲機智:這是矛盾的 – 2009-11-02 03:04:20

+4

您真的無法弄清楚他的意思而不玩弄語義嗎? – Tinister 2009-11-02 03:10:03

+0

好吧,我看不出原來的文件是否被留下,而另一個創建的文件或修改後的文件替換了第一個。 – 2009-11-02 03:22:38

回答

5

做最簡單的方法是這樣的:

string filePath = ... 
List<string> lines = new List<string>(File.ReadAllLines(filePath)); 
lines.RemoveAt(2); //Remove the third line; the index is 0 based 
File.WriteAllLines(filePath, lines.ToArray()); 

注意,這將是對於大文件非常低效的。

2

假設你有一個lineIsGood方法,該方法確定給定的行是否是你想要保留的行(在你的情況下,你可以檢查它是否不是第二行,但我假設你' ð最終需要更嚴格的標準):

Queue<string> stringQueue = new Queue<string(); 
string tempLine = ""; 

StreamReader reader = new StreamReader(inputFileName); 
do 
{ 
    tempLine = reader.ReadLine(); 
    if (lineIsGood(tempLine)) 
    { 
      stringQueue.Enqueue(tempLine); 
    } 
} 
while(reader.Peek() != -1); 
reader.Close(); 

StreamWriter writer = new StreamWriter(inputFileName);  
do 
{ 
    tempLine = (string) stringQueue.Dequeue(); 
    writer.WriteLine(tempLine);   
} 
while (stringQueue.Count != 0); 
writer.Close(); 
+0

這將在不清除文件的情況下追加行。您需要寫入臨時文件,然後用它替換原始文件。 – SLaks 2009-11-02 03:15:13

+0

在同一個文件上有讀寫器是否真的有效?我不會期望它。 – Tinister 2009-11-02 03:16:20

+0

我還沒有嘗試過,但我認爲它會起作用,因爲它們不在同一個流中。但是,正如我上面提到的那樣,它不會做他想做的事。 – SLaks 2009-11-02 03:17:41

0

也許使用StreamWriter.Write(char [] buffer,int index,int count)過載。

它具有能夠在文件中的某一點開始寫入的優點。所以你所需要做的就是讀取行數並計算你傳遞的字符數,讀入你想要改變的行,得到它的長度然後像這樣使用它

StreamWriter.Write(NewLine.CharArray(), CharCount,LineLength)