[英]Writing data from textbox into text file
這是代碼im用於讀寫文本文件。
StreamWriter sw1 = new StreamWriter("DataNames.txt");
sw1.WriteLine(textBox1.Text);
sw1.Close();
StreamWriter sw2 = new StreamWriter("DataNumbers.txt");
sw2.WriteLine(textBox2.Text);
sw2.Close();
FileInfo file1 = new FileInfo("DataNames.txt");
StreamReader sr1 = file1.OpenText();
while (!sr1.EndOfStream)
{
listBox1.Items.Add(sr1.ReadLine());
}
FileInfo file2 = new FileInfo("DataNumbers.txt");
StreamReader sr2 = file2.OpenText();
while (!sr2.EndOfStream)
{
listBox2.Items.Add(sr2.ReadLine());
}
問題是,當我單擊按鈕以將文本框中的數據保存到文本文件時,出現錯誤,提示“該進程無法訪問文件'C:\\ xxxx \\ xxxxxx \\ xxxxx \\ xxxx \\ xxxxx \\ xxxxx.txt”,因為它正在被另一個進程使用。”
誰能告訴我為什么我有這個錯誤,也許可以幫助我解決它
嘗試在流周圍添加一個using
語句,以確保已將它們Disposed
否則文件仍被鎖定到流
例:
//Write
using (StreamWriter sw1 = new StreamWriter("DataNames.txt"))
{
sw1.WriteLine(textBox1.Text);
}
using (StreamWriter sw2 = new StreamWriter("DataNumbers.txt"))
{
sw2.WriteLine(textBox2.Text);
}
// Read
foreach (var line in File.ReadAllLines("DataNames.txt"))
{
listBox1.Items.Add(line);
}
foreach (var line in File.ReadAllLines("DataNumbers.txt"))
{
listBox2.Items.Add(line);
}
似乎您在讀取文件后沒有關閉文件。 調用FileInfo.OpenText之后,您將獲得一個StreamReader
,必須通過Close方法關閉 ,甚至更好的是,使用using
語句將其關閉。
但是已經有可以為您完成所有操作的方法,請看看File.WriteAllText , File.AppendAllText和File.ReadAllLines方法。
一旦不再需要,就需要關閉 StreamReader對象。 這應該可以解決此問題。 即
StreamReader sr1 = file1.OpenText();
try {
while (!sr1.EndOfStream)
{
listBox1.Items.Add(sr1.ReadLine());
}
}
finally {
sr1.Close();
}
FileInfo file2 = new FileInfo("DataNumbers.txt");
StreamReader sr2 = file2.OpenText();
try {
while (!sr2.EndOfStream)
{
listBox2.Items.Add(sr2.ReadLine());
}
}
finally {
sr2.Close();
}
您已打開文件但尚未關閉。
StreamReader sr1 = file1.OpenText();
StreamReader sr2 = file2.OpenText();
發生您的問題,因為您沒有關閉流閱讀器。
使用外部資源(在這種情況下為文件)的一種更安全的方法是將其使用嵌入using
語句中。 using
語句在語句塊的末尾或如果語句塊以其他方式離開時自動關閉資源。 例如,這可能是return
語句或異常。 即使發生異常,也可以保證關閉資源。
您可以將using
語句應用於實現IDisposable
接口的任何對象。
// Writing to the files
using (var sw1 = new StreamWriter("DataNames.txt")) {
sw1.WriteLine(textBox1.Text);
}
using(var sw2 = new StreamWriter("DataNumbers.txt")) {
sw2.WriteLine(textBox2.Text);
}
// Reading from the files
FileInfo file1 = new FileInfo("DataNames.txt");
using (StreamReader sr1 = file1.OpenText()) {
while (!sr1.EndOfStream) {
listBox1.Items.Add(sr1.ReadLine());
}
}
FileInfo file2 = new FileInfo("DataNumbers.txt");
using (StreamReader sr2 = file2.OpenText()) {
while (!sr2.EndOfStream)
{
listBox2.Items.Add(sr2.ReadLine());
}
}
但是,您可以像這樣簡化閱讀部分
// Reading from the files
listBox1.Items.AddRange(File.ReadAllLines("DataNames.txt"));
listBox2.Items.AddRange(File.ReadAllLines("DataNumbers.txt"));
我以前已經看到過這種行為-通常有另一個打開的進程正在阻止文件訪問。 您是否在任務欄中打開了多個開發服務器? (很奇怪,是的,但是我已經看到了這種情況)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.