使用 C# 中的线程删除文件
Posted
技术标签:
【中文标题】使用 C# 中的线程删除文件【英文标题】:File deletion using a thread in 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看看有没有出错? 【参考方案1】:可能发生的事情是某些东西(可能是您正在使用的 API)锁定了文件,从而阻止了删除。
当您在调试和单步执行中执行此操作时,因为您以“缓慢”的速度单步执行,锁定已被释放,文件已成功删除。
您应该将删除代码放入带有异常处理程序的重试循环中,该处理程序会休眠一秒钟左右,然后再次尝试,让操作系统有机会放弃锁定。
要考虑的另一件事是,假设您在生产中将此作为服务运行,则该服务在不同的用户帐户下运行,而不是通过 Visual Studio 调试它时(假设您没有附加到该服务 -这里很难说)。首先检查运行服务的帐户是否有权删除文件。
【讨论】:
以上是关于使用 C# 中的线程删除文件的主要内容,如果未能解决你的问题,请参考以下文章