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

file.MoveTo()报‘文件被其他进程占用’异常的原因及解决方法

问题原因及解决方法

原因分析

  1. BitmapImage默认锁定文件:使用new BitmapImage(new Uri(filename))加载图片时,WPF默认的BitmapCacheOption为OnDemand,会持续占用文件句柄,导致后续MoveTo()操作无法访问文件。
  2. IronOcr资源未完全释放:虽然手动调用了input.Dispose(),但IronTesseract和ocrResult可能残留未释放的文件资源,进一步加剧文件锁定问题。

解决步骤

1. 修改BitmapImage加载逻辑,释放文件句柄

放弃直接通过Uri创建BitmapImage,改用流加载并设置CacheOption = BitmapCacheOption.OnLoad,确保加载完成后立即释放文件流:

using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
    var bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.StreamSource = fileStream;
    bitmap.EndInit();
    imgAnteprima.Source = bitmap;
}

此方式加载完成后,文件流会被自动释放,不会锁定原文件。

2. 用using语句管理IronOcr的可释放资源

将OcrInput和IronTesseract都放入using块中,依靠自动释放机制确保资源完全回收,避免残留文件句柄:

public string leggiQrTramiteTesseract(string filename)
{           
    // 处理图片显示
    using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.StreamSource = fileStream;
        bitmap.EndInit();
        imgAnteprima.Source = bitmap;
    }

    // 处理OCR
    using (var input = new OcrInput(filename))
    {
        input.DeNoise();
        input.Deskew();

        using (var ocrTesseract = new IronTesseract())
        {
            ocrTesseract.Configuration.ReadBarCodes = true;
            var ocrResult = ocrTesseract.Read(input);
                                                                          
            if (ocrResult.Barcodes.Length > 0)
            {
                var barcode = ocrResult.Barcodes[0];
                return barcode.ToString();
            }
        }
    }
    return "";  
}

额外排查点

若修改后仍出现锁定问题,需检查是否有其他进程或后台线程在访问该文件,比如文件监控工具、未关闭的流对象等,确保没有其他代码持有该文件的句柄。

内容的提问来源于stack exchange,提问作者Ricc.g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:44