我正在C#中编写一个在网络上的共享文件服务器上运行的消息传递应用程序。该程序由运行该程序的多个用户工作,该程序访问在多台计算机之间共享的文件。因此,我需要使用StreamReader / StreamWriter一次访问多个程序的文件(编辑:我现在知道这不是一个很好的方法,但这是我当时需要的)。那么我怎样才能访问具有多个程序的单个文件而不会出现有关正在使用的文件的错误?
答案 0 :(得分:2)
如果您需要单个文件,其中多个用户/程序/参与者......在不打扰彼此的情况下进行读/写,我建议考虑(在其他解决方案中)使用Sqlite,就像简单的数据库后端一样。无需安装或服务设置。只需使用C#
dll,基本上,根据您的要求,您将得到您所需要的。
一个用户在db file
(INSERT)中写入另一个用户可以从中读取(SELECT)。
答案 1 :(得分:2)
我认为您的方法将来会导致问题。如果我是你,我会考虑利用Redis pub / sub。
但是,既然你问过......(我写了一篇博文:http://procbits.com/2011/02/18/streamwriter-share-read-access-in-another-process/)
聊天数据生成器:
var fs = File.Open(@"C:\messages.txt", FileMode.Append, FileAccess.Write, FileShare.Read);
var sw = new StreamWriter(fs);
sw.AutoFlush = true;
您应用中的其他地方或其他应用...
聊天数据的读者:
var fs = File.Open(@"C:\messages.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
var sr = new StreamReader(fs);
答案 2 :(得分:0)
我认为你应该三思而后行,将文本文件作为通讯同伴的一种手段 这就像是在寻找麻烦。
请查看使用P2P解决方案:
Peer Channel Chat
A simple peer to peer chat application using WCF netPeerTcpBinding
这将为您提供更适合您需求的架构。