C# Windows服务与WinForm共享文件时出现访问冲突问题求助
解决文件访问冲突问题
问题出在文件访问模式不兼容:服务写入时默认独占文件,WinForms读取时也默认独占文件,两者同时操作就会触发“文件被占用”的错误。需要修改两边的文件打开逻辑,允许共享访问。
修改Windows服务的写入代码
把File.AppendText替换为显式指定共享模式的File.Open,让写入时允许其他程序读取文件:
public void write_data_to_file() { // 指定FileShare.Read,允许读取端同时访问 using (var fileStream = new FileStream(@"D:\test_files\test.csv", FileMode.Append, FileAccess.Write, FileShare.Read)) using (StreamWriter writer = new StreamWriter(fileStream)) { writer.WriteLine(GVAR.Parameter_value_array[0].ToString("0.0000000")); } }
修改Windows Forms的读取代码
打开文件时指定FileShare.Write,让读取时允许服务继续写入:
public void Read_Test_File() { // 指定FileShare.Write,允许写入端同时访问 using (var fileStream = new FileStream(@"D:\test_files\test.csv", FileMode.Open, FileAccess.Read, FileShare.Write)) using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true)) { String line; while ((line = streamReader.ReadLine()) != null) { if (line == "$") { break; } bool isLetter = !String.IsNullOrEmpty(line) && Char.IsLetter(line[0]); if (isLetter == true) { continue; } List_Position.Add(double.Parse(line)); } } }
关键说明
- 服务端写入时:用
FileShare.Read放开读取权限,自己保留写入权限 - 客户端读取时:用
FileShare.Write放开写入权限,自己保留读取权限 - 两边都用
using块确保文件流及时释放,避免长期占用
内容的提问来源于stack exchange,提问作者Mdarende
相关产品推荐
相关产品推荐

