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
相关产品推荐
相关产品推荐

