-4

我的线程无法删除 PDF 文件。当我调试此解决方案时,该文件正在删除。在服务模式下,它不会删除。

这是我的示例代码:

Thread Worker = new Thread(new ThreadStart(Start)); //Main Function
Worker.Start();

public void Start()
{
    string text=PDFToText(@"C:\1.pdf");
    File.Delete(@"C:\1.pdf");
}

private string PDFToText(string filename) // My PDF reader function
{
    PDDocument doc = PDDocument.load(filename);
    PDFTextStripper stripper = new PDFTextStripper();
    string text = stripper.getText(doc);
    doc.close();
    return text;
}

问题出在哪里?

4

1 回答 1

2

可能发生的事情是某些东西(可能是您正在使用的 API)对文件进行了锁定,从而阻止了删除。

当您在调试中执行此操作并单步执行时,因为您以“缓慢”的速度单步执行,锁定已被释放,并且文件已成功删除。

您应该将删除代码放入带有异常处理程序的重试循环中,该处理程序会休眠一秒钟左右,然后再次尝试,让操作系统有机会放弃锁定。

要考虑的另一件事是,假设您在生产中将其作为服务运行,该服务在不同的用户帐户下运行,而不是通过 Visual Studio 调试它时(假设您没有附加到该服务 - 很难在这里告诉)。首先检查运行服务的帐户是否有权删除该文件。

于 2013-05-09T08:50:35.863 回答