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

C# IO报错:进程无法访问文件,因该文件正被其他进程占用

问题根因

你遇到的文件占用不是其他进程导致的,是你自己的程序持有了文件句柄没有释放:

  • 窗口加载时你在Form1_Load方法里创建了StreamReader对象打开myfile.txt,读取完成后没有关闭读取器、释放文件资源,文件会一直被当前程序占用直到进程退出
  • 点击退出按钮时调用File.WriteAllLines尝试写入同一个文件,就会触发占用报错
修复方案

将Form1_Load中的文件读取逻辑用using语句包裹,using会在代码块执行完成后自动释放StreamReader对应的文件句柄,修改后的代码如下:

private void Form1_Load(object sender, EventArgs e)
{
    // 用using自动释放StreamReader资源
    using (StreamReader sr = new StreamReader("myfile.txt"))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            string[] arr = line.Split(',');
            int i = 0;
            //将数组元素存入names字典
            while (i < arr.Length)
            {
                names[arr[i]] = arr[i + 1];
                i += 2;
            }
        }
    }
}
额外优化建议

可以补充文件存在性判断逻辑,避免首次运行没有myfile.txt时程序启动报错:

private void Form1_Load(object sender, EventArgs e)
{
    string filePath = "myfile.txt";
    if (!File.Exists(filePath))
    {
        // 文件不存在时直接返回,不需要读取
        return;
    }
    using (StreamReader sr = new StreamReader(filePath))
    {
        // 原有读取逻辑不变
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            string[] arr = line.Split(',');
            int i = 0;
            while (i < arr.Length)
            {
                names[arr[i]] = arr[i + 1];
                i += 2;
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Avmeade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:03