簡體   English   中英

StreamWrite WriteLine不能作為委托工作

[英]StreamWrite WriteLine doesn't work as delegate

我想創建一個簡單的記錄器,為此,我以這種方式使用委托:

delegate void Logger(string message);

但是,當我嘗試使用下面的方法創建一個Logger時,這並沒有在文件中添加任何內容。

Logger CreateFileLogger(string filePath) {
            if (!File.Exists(filePath)) File.Create(filePath);
            StreamWriter stream = File.AppendText(filePath);
            return stream.WriteLine;
        }

我不能肯定地說這是StreamWriter類的問題還是委托的問題,無論如何我認為是第一個問題。

提前致謝。

您永遠不會處理該流,並且永遠不會刷新該流(因為您沒有編寫足夠的數據),因此不會向該文件寫入任何內容。 您不應該泄漏這樣的一次性資源。

幸運的是,根本不需要處理流。 只需使用File.AppendAllText而不是自己創建流並對其進行管理。

問題在於它正在寫入StreamWriter但是您永遠也不會關閉該StreamWriter ,因此它不會被刷新,並且您也將文件句柄保持打開狀態-不好。

如果你一定要做沖洗並關閉文件,它的罰款:

using System;
using System.IO;

class Test
{
    static void Main()
    {
        using (var writer = new StreamWriter("test.txt"))
        {
            Action<string> logger = writer.WriteLine;
            ExecuteDelegate(logger);
        }
    }

    static void ExecuteDelegate(Action<string> logger)
    {
         logger("First line");
         logger("Second line");
         logger("Third line");
    }
}

您可以嘗試將WriteLine包裝在另一個操作中,例如:

Logger CreateFileLogger(string filePath) {
    if (!File.Exists(filePath)) File.Create(filePath);
        StreamWriter stream = File.AppendText(filePath);
        return (str) => { stream.WriteLine(str); stream.Flush(); };
}

但是,流從未關閉,如上所述。 希望能幫助到你。

暫無
暫無

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

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