簡體   English   中英

為什么我試圖制作StreamWriter實例時拒絕文件訪問?

[英]Why am I getting file access denied trying to make a StreamWriter instance?

string pathDir = Path.GetDirectoryName(Application.LocalUserAppDataPath) + "\\settings";
string settingsFile = "settings.txt";
StreamWriter w;

public Form1()
{
    InitializeComponent();

    if (!Directory.Exists(Path.Combine(pathDir, settingsFile)))
        Directory.CreateDirectory(Path.Combine(pathDir, settingsFile));
    settingsFile = Path.Combine(pathDir, settingsFile);
    w = new StreamWriter(settingsFile, true);

唯一的例外是:

w = new StreamWriter(settingsFile, true);

拒絕訪問路徑'C:\\ Users \\ bout0_000 \\ AppData \\ Local \\ Grads_Scripts \\ Grads_Scripts \\ settings \\ settings.txt'

現在,我將StreamWriter的實例移至textBox1_TextChanged事件:

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            w = new StreamWriter(settingsFile, true);
            w.Write(textBox1.Text);
            w.Close();
        }

我想將我在textBox1中鍵入的文本實時寫入文本文件。 如果沒有按鈕,請單擊“確認”或“實時”。 當我鍵入內容時,它將把它寫入文本文件。 但是現在我在文本文件中看到的所有內容都與我多次鍵入的內容相同。

看來您正在創建一個名為[...]\\Grads_Scripts\\settings\\settings.txt然后嘗試將其作為文件寫入。 轉到目錄C:\\Users\\bout0_000\\AppData\\Local\\Grads_Scripts\\Grads_Scripts\\settings\\然后查看是否存在名為settings.txt的文件夾。 如果是這樣,請刪除它並修改您的代碼以僅創建父目錄。

您應該能夠如下更改代碼:

string pathDir = Path.GetDirectoryName(Application.LocalUserAppDataPath) + "\\settings";
string settingsFile = "settings.txt";
StreamWriter w;

public Form1()
{
    InitializeComponent();

    // Create the parent directory if it doesn't exist
    if (!Directory.Exists(pathDir)) 
        Directory.CreateDirectory(pathDir);
    settingsFile = Path.Combine(pathDir, settingsFile);
    w = new StreamWriter(settingsFile, true);
}

請記住,將StreamWriter包裝在using語句中(或手動調用Dispose ),以便在完成寫入后釋放文件資源。

using( w = new StreamWriter(settingsFile, true) ){
    // Write to stream writer
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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