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

C#打印目录PDF后移动失败,仅注释移动代码可正常打印如何解决?

问题根因

你代码里的打印逻辑是通过Process.Start()启动系统关联的PDF打印程序,这个方法是异步执行的,调用后会立刻返回而不会等待打印任务完成。你第一个循环刚触发完所有打印进程,第二个循环就立刻把源文件复制删除了,此时打印程序还没完成PDF文件的读取操作,自然会打印失败。

解决方案

1. 核心修复逻辑

在启动打印进程后调用WaitForExit()方法,等待打印程序运行结束后再执行文件移动操作,同时建议把打印和移动逻辑合并到同一个循环中,避免重复遍历目录。

2. 修正后的代码示例

//Print & Move the files after printing
DirectoryInfo sourceinfo = new DirectoryInfo(@"C:\fold");
DirectoryInfo target = new DirectoryInfo(@"C:\fold1");
if (!Directory.Exists(target.FullName))
{
    Directory.CreateDirectory(target.FullName);
}

foreach (FileInfo fi in sourceinfo.GetFiles())
{
    if (fi.Length != 0)
    {
        using (System.Diagnostics.Process process = new System.Diagnostics.Process())
        {
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.Verb = "print";
            process.StartInfo.FileName = fi.FullName;
            process.StartInfo.UseShellExecute = true;
            process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            process.Start();
            // 等待打印进程退出,可按需添加超时时间,比如WaitForExit(30000)代表最多等30秒,避免进程卡死导致程序挂起
            process.WaitForExit();
        }
        // 打印完成后直接移动文件,无需二次遍历
        fi.CopyTo(Path.Combine(target.FullName, fi.Name), true);
        fi.Delete();
    }
}

额外注意事项

  • 部分默认PDF阅读器(比如Adobe Acrobat)打印完成后可能不会主动退出进程,会导致WaitForExit()一直卡住。这种情况建议指定用支持命令行打印、打印后自动退出的轻量PDF工具执行打印,稳定性更高。
  • 你原代码第二个循环里用到的变量c没有定义,需要根据你的实际业务逻辑修正判断条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:48:02