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;
}
问题在哪里?
可能发生的事情是某些东西(可能是您正在使用的API)对文件有锁,阻止删除。
当您在调试中执行此操作并逐步执行时,因为您以"缓慢"的速度逐步执行,因此锁已被释放,并且文件已成功删除。
你应该把删除代码放在一个带有异常处理程序的重试循环中,它会休眠一秒钟左右,然后再尝试,给操作系统一个机会放弃锁。
另一件需要考虑的事情是,假设您在生产环境中将其作为服务运行,那么该服务运行在与通过visual studio调试时不同的用户帐户下(假设您没有附加到该服务—这里很难判断)。首先检查服务运行的帐户是否具有删除文件的权限。