簡體   English   中英

將數據從文本框寫入文本文件

[英]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.WriteAllTextFile.AppendAllTextFile.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.

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