You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:50:43