【问题标题】:File deletion using a thread in C#使用 C# 中的线程删除文件
【发布时间】:2013-05-09 08:34:29
【问题描述】:

我的话题无法删除 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;
}

问题出在哪里?

【问题讨论】:

  • 你有什么异常吗?
  • 不,我也不例外...
  • 抛出了什么异常?
  • 我猜这不是使用线程删除文件的错误,而是当前线程调用时文件正在使用中。
  • 能不能加个Catch Exception Message看看有没有出错?

标签: c# multithreading pdf-reader


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2012-05-05
    • 2012-12-16
    相关资源
    最近更新 更多