我继承了一系列.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);
}
如果我以这种方式实施,我没有任何理由相信这些进程会锁定文件,但我想我会问。
提前致谢!
答案 0 :(得分:3)
默认使用(string path, FileMode mode, FileAccess access)
的{{1}}构造函数也会得到以下配置:
因为您不希望该过程锁定文件,所以这对您来说非常完美,因为您需要只读(请参阅https://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx)
但是,如果您想要明确,可以使用以下构造函数:
FileStream
答案 1 :(得分:-1)
我想你可能需要告诉你的FileStream构造函数你想如何共享文件? "fileshare"