【发布时间】:2014-07-31 15:39:09
【问题描述】:
我使用此代码将控制台输出重定向到文件,然后读取并显示它。我想停止使用文件,因为我用这些控制台文件污染了我的文件夹。我怎样才能在内存中做到这一点?我不希望任何文件污染系统。也许我在这里尝试一些奇怪的东西。 我只想让 1 个线程读取同一应用程序的控制台输出:
- 1 个应用程序
- 多线程写入控制台
- 1 线程从控制台读取
我的工作文件代码:
private StreamWriter currentOut = null;
private void RedirectConsole()
{
currentOut = new StreamWriter(new FileStream(filename,
FileMode.Create, FileAccess.Write, FileShare.Read));
currentOut.AutoFlush = true;
Console.SetOut(currentOut);
ThreadPool.QueueUserWorkItem(o => { Listen(); });
}
private void Listen()
{
StreamReader fileIn = new StreamReader(new FileStream(filename,
FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
while (true)
{
try
{
if (!fileIn.EndOfStream)
{
string a = fileIn.ReadLine();
MessageBox.Show(a);
}
Thread.Sleep(25);
}
catch { }
}
}
This 似乎是我想要的。但我无法实现这一点(帮助?)。文件就像一个缓冲区。您从一端写入并从另一端读取。我需要同样的记忆。
【问题讨论】:
-
您是否每次都创建一个新文件?您可以只使用一个文件并在程序关闭时将其清除吗?我不知道将其重定向到另一个线程,但您似乎至少不需要“污染”您的文件夹。
-
@eddie_cat 是的,每次启动应用程序时我都会打开一个新文件。对于多实例,我每次都选择一个新文件名。例如,当应用程序崩溃时,文件将保留。我认为寻找要删除的文件或其他什么是一个糟糕的解决方案。
-
如果您希望在应用崩溃时保留文件,您唯一的选择可能是将其写入文件。
-
@Joshpbarron 不,我不想要任何文件。
标签: c# multithreading file memory console