使用File.ReadLines读写文件报错:文件被占用如何解决?
问题分析与解决方法
占用进程说明
占用文件的就是你当前运行的程序本身。
原因
File.ReadLines是延迟加载的方法:它不会一次性将文件内容全部读取到内存,而是在执行For Each遍历的时候才逐行读取,并且会保持文件句柄处于打开状态直到遍历完成。你的代码在遍历开始前就用StreamWriter尝试打开同一个文件,导致当前进程内部的文件读写操作冲突,触发了IOException。
解决方法
先把需要保留的行一次性读取到内存(比如List(Of String)),此时File.ReadLines会立即关闭文件句柄,之后再操作文件就不会有冲突。同时推荐用Using语句管理StreamWriter,它会自动释放文件资源,避免手动管理的遗漏。
修改后的代码:
' 先筛选并保存需要保留的行到内存,文件读取完成后自动关闭 Dim keepLines As New List(Of String)() For Each line In File.ReadLines(Path & "X.ini") If condition_iskeepIt Then keepLines.Add(line) End If Next ' 安全打开文件写入内容 Using paramFile As New StreamWriter(Path & "X.ini", append:=False) ' 写入保留的行 For Each line In keepLines paramFile.WriteLine(line) Next ' 写入新内容 ' ...write revised lines End Using
内容的提问来源于stack exchange,提问作者Ernesto
相关产品推荐
相关产品推荐

