我偶尔会收到以下错误,很少:
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();
答案 0 :(得分:1)
输入/输出过程是否可靠,以至于创建PDF文件的设备繁忙?检查事件查看器以查看是否有相关内容报告
并没有什么坏处答案 1 :(得分:0)
希望这个帮助
答案 2 :(得分: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);
}