VB.Net中FileStream生成文件后被占用异常求助
VB.NET 文件占用问题解决建议
问题场景
编写VB代码实现文件读取、处理后写入新文件,但后续操作该输出文件时,始终提示“文件被另一进程占用”;重命名文件后可正常操作,即使重启程序也无法解决,已尝试使用Using块包裹FileStream及手动调用Close(),问题仍存在。
涉及代码片段
Using destinationFileStream As New FileStream(filename2, FileMode.Create, FileAccess.Write) ' Create a buffer to store the read bytes Dim buffer(4096) As Byte Dim Buffer2(4096) As Byte Dim bytesRead As Integer ' Process the file byte by byte Do ' Read a chunk of bytes from the source file bytesRead = sourceFileStream.Read(buffer, 0, buffer.Length) ' If bytesRead is 0, we reached the end of the file If bytesRead > 0 Then ' do things with the data read in and put then in buffer2 ' Write the bytes to the destination file destinationFileStream.Write(Buffer2, 0, bytesRead) End If Loop While bytesRead > 0 destinationFileStream.Close() 'redundant code bit because USING forces a close End Using
解决建议
- 强制刷新文件缓冲区:在写入循环结束后、
Using块结束前,调用Flush(True)强制将缓冲区数据写入磁盘并等待操作完成,避免系统后台持有文件句柄:destinationFileStream.Flush(True) - 修改FileStream的共享权限:创建
destinationFileStream时添加FileShare.ReadWrite参数,允许后续操作访问该文件:Using destinationFileStream As New FileStream(filename2, FileMode.Create, FileAccess.Write, FileShare.ReadWrite) - 排查系统级占用进程:若重启程序后问题仍存在,打开Windows资源监视器(
resmon.exe),切换到“CPU”选项卡,在“关联的句柄”搜索框输入文件名,找到占用文件的进程并关闭(常见为防病毒软件、Windows搜索索引器、文件预览工具)。 - 用基础代码验证问题:先使用最简单的文件复制代码测试,排除业务逻辑导致的异常:
若此操作仍触发占用提示,可确定是系统环境问题,需重点排查第三方进程干扰。File.Copy(sourceFilePath, filename2, True)
内容的提问来源于stack exchange,提问作者Stratcat51
相关产品推荐
相关产品推荐

