好的,可以从同一个文本文件中读取多个进程吗?

时间:2017-08-11 14:01:32

标签: c# asp.net ntfs

我继承了一系列.NET项目的开发职责,这些项目包括Windows服务,ASP.NET网站和通过任务管理器启动的标准可执行文件。

所有这些组件都连接到MySQL数据库。目前,加密的连接字符串位于各个app.config / web.config文件中。我认为必须在多个地方更新连接字符串是一种痛苦,所以我有想法将连接字符串放在一个文本文件中,该文件将被所有单独的组件访问。

在我提前全力以赴之前,我想问一下我是否可能会引入一个错误,因为可能会有多个进程同时尝试访问此文本文件。我已经编写了一个读取文本文件的通用方法,我小心翼翼地确保文件正在" Read"模式:

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);
    }

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

提前致谢!

2 个答案:

答案 0 :(得分:3)

默认使用(string path, FileMode mode, FileAccess access)的{​​{1}}构造函数也会得到以下配置:

  • FileShare = FileShare.Read
  • bufferSize = 4096
  • useAsync = false

因为您不希望该过程锁定文件,所以这对您来说非常完美,因为您需要只读(请参阅https://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx

但是,如果您想要明确,可以使用以下构造函数:

FileStream

答案 1 :(得分:-1)

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