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

VB.NET应用中CSV文件因被其他进程占用无法访问的问题

解决共享文件夹中CSV文件被进程锁定的问题

核心修复:使用Using语句确保资源正确释放

手动调用Close()在共享文件夹环境下(尤其是存在网络延迟时)可能因异常、缓冲区未完全刷新等原因导致文件句柄未释放,改用Using语句能自动管理StreamWriter的生命周期,确保无论是否发生异常,文件资源都会被及时释放。

修改后的代码:

Try
    Dim nowPathString As String = Now().ToString("yyyyMMdd-hhmmss")
    Dim nowString As String = Now().ToString()
    ' 修正字符串插值语法,确保路径格式正确
    Dim csvFilePath As String = $"\\webserver\ExcelTest\Test-{nowPathString}.csv"
    
    ' Using块自动调用Close()和Dispose(),彻底释放文件句柄
    Using outFile As IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(csvFilePath, False)
        outFile.WriteLine("Warehouse, StockItemCode, AllocationQuantity, Reference, SecondReference, ActivityDate")
        outFile.WriteLine($"Main, SHE060, 1, 123456, 123456-1, {nowString}")
        ' 显式刷新缓冲区,确保所有数据写入磁盘后再释放资源
        outFile.Flush()
    End Using
Catch ex As Exception
    MsgBox(ex.Message)
End Try

额外排查与优化建议

  • 修正路径语法:原代码中csvFilePath的字符串插值写法存在语法错误,需确保用$"路径内容"的格式正确解析共享路径。
  • 显式指定文件共享模式:如果默认的共享模式仍导致锁定冲突,可改用File.Open方法明确设置访问权限:
Using fs As IO.FileStream = IO.File.Open(csvFilePath, IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.Read)
    Using outFile As New IO.StreamWriter(fs)
        outFile.WriteLine("Warehouse, StockItemCode, AllocationQuantity, Reference, SecondReference, ActivityDate")
        outFile.WriteLine($"Main, SHE060, 1, 123456, 123456-1, {nowString}")
        outFile.Flush()
    End Using
End Using
  • 排查外部锁定进程:
    • 检查防病毒软件是否实时扫描共享文件夹,临时关闭扫描测试,若问题解决则将共享文件夹添加到扫描排除列表。
    • 禁用Windows搜索服务对共享文件夹的索引功能:打开「索引选项」,移除共享文件夹的索引项,避免索引进程长时间占用文件句柄。
    • 确认是否有其他应用(如Excel、文件管理器预览窗格)在访问生成的CSV文件,这类程序可能会保持文件句柄打开。
  • 检查共享权限:确保共享文件夹权限允许应用程序执行创建、写入、删除等完整操作,同时通过「计算机管理」→「共享文件夹」查看是否有异常会话占用文件句柄。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:05:30