c#中使用线程删除文件

本文关键字:删除 文件 线程 | 更新日期: 2023-09-27 18:12:42

我的线程不能删除PDF文件当我调试此解决方案时,文件正在删除。service模式下,不删除

这是我的示例代码:

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;
}

问题在哪里?

c#中使用线程删除文件

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

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

你应该把删除代码放在一个带有异常处理程序的重试循环中,它会休眠一秒钟左右,然后再尝试,给操作系统一个机会放弃锁。

另一件需要考虑的事情是,假设您在生产环境中将其作为服务运行,那么该服务运行在与通过visual studio调试时不同的用户帐户下(假设您没有附加到该服务—这里很难判断)。首先检查服务运行的帐户是否具有删除文件的权限。