确定有多个进程从同一个文本文件中读取?
我继承发展责任一组,其中包括Windows服务的,一个ASP.NET网站,它们通过任务管理器推出标准的可执行文件.NET项目。确定有多个进程从同一个文本文件中读取?
所有这些组件连接到MySQL数据库。目前,加密的连接字符串位于各个app.config/web.config文件中。我认为必须在多个地方更新连接字符串是一种痛苦,所以我的想法是将连接字符串放在一个文本文件中,所有单独的组件都可以访问它。
之前,我向前迈进充满蒸汽的,我想请问如果我可能会引入错误,因为有可能是多个进程试图在同一时间访问该文本文件。我写了一个通用的方法对阅读的文本文件,我很小心,以确保该文件是在“阅读”模式被打开:
public string AESDecryptFromFile(string path, string password, string IV)
{
if (!File.Exists(path))
throw new Exception("File not found: " + path);
string cryptogram;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
using (StreamReader sr = new StreamReader(fs))
{
cryptogram = sr.ReadToEnd().Trim(new char[] { '\r', '\n', ' ' });
}
}
return AESDecrypt(cryptogram, password, IV);
}
我没有任何理由相信这些进程如果我以这种方式实现它,会锁定文件,但我想我会问。
在此先感谢!
默认情况下与(string path, FileMode mode, FileAccess access)
构造的FileStream
将得到下面的配置以及:
- 文件共享= FileShare.Read
- BUFFERSIZE = 4096
- useAsync =假
由于您不希望进程锁定文件,因此您将需要只读(请参阅https://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx)
不过,如果你想明确你可以使用下面的构造函数:
FileStream s = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);
谢谢,这真的很有帮助! –
直到你不改变文件还是可以的。它使问题时,你想要写或写和多线程读取,因为你不知道哪一个线程会写/读端/启动第一,所以你不能预测任何行为
你为什么不尝试测试它? – mason
https://stackoverflow.com/questions/3527205/multiple-threads-reading-from-the-same-file –
@mason - 我的意思是说,我没有在我的开发环境,有效地证明了这一点足够的流量出。我想我可以写一个产生多个线程的测试程序。 –