确定有多个进程从同一个文本文件中读取?

问题描述:

我继承发展责任一组,其中包括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); 
    } 

我没有任何理由相信这些进程如果我以这种方式实现它,会锁定文件,但我想我会问。

在此先感谢!

+0

你为什么不尝试测试它? – mason

+0

https://stackoverflow.com/questions/3527205/multiple-threads-reading-from-the-same-file –

+0

@mason - 我的意思是说,我没有在我的开发环境,有效地证明了这一点足够的流量出。我想我可以写一个产生多个线程的测试程序。 –

默认情况下与(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); 
+0

谢谢,这真的很有帮助! –

直到你不改变文件还是可以的。它使问题时,你想要写或写和多线程读取,因为你不知道哪一个线程会写/读端/启动第一,所以你不能预测任何行为

我想你可能需要告诉你的FileStream构造函数如何分享文件? "fileshare"