将文件写入重定向到流C#

3
我想询问是否可以将特定文件的写入重定向到我的应用程序中的内存流,以便我可以立即读取它。如果可能,请说明如何操作。
谢谢。

你的应用程序是在写入文件还是与你无法控制的另一个应用程序交互? - PVitt
我觉得你对流的概念可能有误解,听起来你真正想表达的是..我能否将写入操作重定向到应用程序中的特定文件或内存流。 - meandmycode
@PVitt 是的,这是另一个我无法控制的应用程序。 @meandmycode 是的,那就是我想表达的意思。 - rbns
3个回答

4

确保你的应用程序能够与Stream协作,然后你就可以使用MemoryStream具体实现来完成无需文件的流处理。


是的,但请注意MemStram只有1个位置 - 无法轻松交错读写。 - H H

2
你需要的是一个既可以写入文件,又可以写入你正在观察的另一个流的流——一种流分离器,在 Unix 世界中通常称为tee
对于 .NET,你可以使用这个实现来进行流分离。将其传递一个FileStream(以便将文件写入),并为第二个流传递一个Stream实现,在流被写入时执行你想要的操作(例如,一个覆盖了Write方法的MemoryStream子类)。 更新:从你的评论中我看到我的回答并不是你所需要的——我没有意识到你在原始问题中没有控制写入文件的应用程序。
为了获得这种控制,如果你需要最精细的控制,你需要使用一个低级别的驱动程序来拦截系统调用,就像FileMon一样。如果你需要稍微少一些的控制,你可以使用System.IO.FileSystemWatcher

也许我没有理解echostream的用途,但我的情况是我有两个应用程序 - 其中一个是我无法控制的应用程序,它正在写入日志文件,另一个是我的C#应用程序。现在我想要的是将日志的写入重定向到我的C#中的一个流中。此外,该程序向日志写入了大量数据,所以我需要它运行速度快。 - rbns

0
我不知道如何按照你说的方式来做,但是你可以使用一个FileWatcher来监听文件。如果文件被写入,你将会收到通知并且可以读取它。

我觉得这个可能不够快。 - rbns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接