2

我偶尔且很少收到以下错误:

Access to the path 'e:\Batch\CR\data_Test\IM_0232\rdlcTemp\RN837102.ZM\MemberEOB_1.pdf' is denied.

发生错误的确切代码块如下所示。此错误仅偶尔发生且很少发生。如果我们重新启动服务器并尝试再次运行相同的输入文件,我们会发现错误不会再次发生 - 但并非总是如此。此代码在一个循环中,在应用程序的一次运行中最多可以执行 5000 次。我们发现错误可能在运行中的任何时候发生 - 将创建 100 个 PDF 文件而没有任何问题,然后会发生此错误。为什么我们会收到此错误?

相关代码:

byte[] bytes = report.Render("PDF", deviceInfo);
FileStream fs = new FileStream(@savePath + ".pdf", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
fs.Dispose();
4

3 回答 3

1

输入/输出过程是否可能如此紧张以至于正在创建它的 PDF 文件的设备很忙?检查事件查看器以查看那里是否报告了任何相关内容并没有什么坏处

于 2013-07-17T15:19:55.443 回答
0

由于这还没有解决,这里是我的建议中的相关代码:

static object staticSyncObject = new object();  // in class level fields
// ... 
foreach( string savePath in paths )
{
    byte[] bytes = report.Render("PDF", deviceInfo);
    lock(staticSyncObject) // synchronized() was java, ideally would time out
    {
        using(FileStream fs = new FileStream(@savePath+".pdf", FileMode.Create))
        {
            fs.Write(bytes, 0, bytes.Length);
        }
    }
}

在异常处理代码中:

} catch (Exception ex) {
    Console.WriteLine("" + ex);

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.FileName = "handle.exe";
    p.StartInfo.Arguments = "C:\\path_to_pdfs";
    p.Start();

    int ch;
    while ((ch = p.StandardOutput.Read()) != -1)
        Console.Write((char)ch);
}
于 2013-07-09T13:19:30.353 回答
0
  1. 从路径 e:\Batch\CR\data_Test\IM_0232\rdlcTemp\RN837102.ZM\ 导航到 rdlcTemp
  2. 右键单击 RN837102.ZM 文件夹
  3. 点击属性->安全
  4. 确保为当前帐户用户检查此文件的写入权限
  5. 如果未选中,请单击编辑并启用写入权限
  6. 应用更改

希望这有帮助

于 2013-07-08T21:00:29.990 回答