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