2017-04-01 34 views
0

我想重寫我的txt文件(我需要刪除行)。我用這個代碼:如何重寫txt文件 - 爲什麼我的代碼不起作用

string cesta3 = cesta + "database.txt"; 
string file = new StreamReader(cesta3).ReadToEnd(); 

var linesToKeep = File.ReadLines(cesta3) 
    .Where(l => l != "Meno: " + textBox1.Text + " PN " + textBox2.Text);  

但我不知道如何保存我的文件與同一name.I試試這個:

File.WriteAllLines(cesta3, linesToKeep); // <== exception 

var tempFile = Path.GetTempFileName(); 
File.Move(tempFile + ".txt", cesta3); 

但它拋出異常:

其他信息:訪問路徑「C:\ Users \ Lenovo \ documents \ visual studio 2015 \ Projects \ attendancer \ attendancer \ bin \ Debug \ database.txt」被拒絕。「

我該怎麼辦?

+0

究竟什麼是行不通的?是拋出異常還是沒有發生任何事情? – MetaColon

+0

對不起,這是例外情況:附加信息:訪問路徑「'C:\用戶\聯想\文件\視覺工作室2015 \ Projects \ attendancer \ attendancer \ bin \ Debug \ database.txt'被拒絕。」 –

+0

似乎這個異常與臨時文件無關。您可以標記發生異常的行或嘗試它,而無需將文件移動到臨時文件夾?此外,您可以嘗試手動刪除該文件一次,然後再次運行程序以確保程序自己寫入了該程序。 – MetaColon

回答

3

這行代碼鎖定文件並阻止它移動:string file = new StreamReader(cesta3).ReadToEnd();

修復:

  • 你可以閱讀從它file文本與using
  • 或者因爲沒有使用什麼樣的後正確地關閉StreamReaderStreamReaderReadToEndfile變量)的結果,你可以簡單地刪除該行。

旁註:File.Move將拋出更多的異常,你是與第一個完成後的源文件是不可能存在的 - 我不知道你正在嘗試與調用來完成。

1

您的密碼不會關閉StreamReader。您可以使用File.ReadAllText自動關閉它。

string cesta3 = cesta + "database.txt"; 
//string file = new StreamReader(cesta3).ReadToEnd(); 
string file = File.ReadAllText(cesta3); 

var linesToKeep = File.ReadLines(cesta3) 
    .Where(l => l != "Meno: " + textBox1.Text + " PN " + textBox2.Text); 

File.WriteAllLines(cesta3, linesToKeep); // <== exception 
var tempFile = Path.GetTempFileName(); 
File.Move(tempFile + ".txt", cesta3); 
+0

你的帖子沒有包含任何解釋。在提交答案以實際提供答案之前,您可以使用一段時間。當你這樣做時,不要忘記b&$#並且在代碼轉儲答案上投訴downvotes。 –

+0

當我使用'File.ReadAllText'時,我不使用操作數'!='。 –

+0

@RastislavSrnánek我不明白你最後的評論。 –

相關問題