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

使用C#的IronOCR处理PDF后出现文件占用无法重复处理的问题

C# IronOCR处理PDF文件被占用问题

问题场景

使用C#结合IronOCR监听指定文件夹提取PDF文本,首次运行正常,但再次放入相同或其他PDF时触发错误:

System.IO.IOException: 'The process cannot access the file 'D:\TestOCR\C01.pdf' because it is being used by another process.'

错误指向代码行:

using (var input = new OcrInput(pdfFileToProcess))

原处理代码:

var ocr = new IronTesseract();
using (var input = new OcrInput(pdfFileToProcess))
{
    input.Deskew();
    input.Binarize();
    var ocrResult = ocr.Read(input);
    textFromOCRResult = ocrResult.Text;
}

解决方案

1. 复制到临时文件再处理

原文件可能被写入进程锁定,或IronOCR未正确释放原文件句柄,通过临时文件规避锁定问题:

// 生成唯一临时PDF路径
var tempFilePath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.pdf");
File.Copy(pdfFileToProcess, tempFilePath, overwrite: true);

var ocr = new IronTesseract();
using (var input = new OcrInput(tempFilePath))
{
    input.Deskew();
    input.Binarize();
    var ocrResult = ocr.Read(input);
    textFromOCRResult = ocrResult.Text;
}

// 处理完成后清理临时文件
File.Delete(tempFilePath);

2. 确保文件完全写入后再处理

FileSystemWatcher可能在文件未完全写入时触发处理,导致文件被锁定,添加文件就绪检查:

// 检查文件是否可被独占访问,判断是否写入完成
private bool IsFileAccessible(string filePath)
{
    try
    {
        using (var stream = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
        {
            return true;
        }
    }
    catch (IOException)
    {
        return false;
    }
}

// 在监听事件中调用
if (!IsFileAccessible(pdfFileToProcess))
{
    // 延迟重试,避免处理未写入完成的文件
    await Task.Delay(1500);
    // 重新执行PDF处理逻辑
}

3. 使用文件流加载PDF

改用文件流实例化OcrInput,手动控制文件访问权限,降低锁定概率:

var ocr = new IronTesseract();
// 以共享读写模式打开文件流
using (var fileStream = new FileStream(pdfFileToProcess, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var input = new OcrInput(fileStream))
{
    input.Deskew();
    input.Binarize();
    var ocrResult = ocr.Read(input);
    textFromOCRResult = ocrResult.Text;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:47:26