使用 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# 中的线程删除文件的主要内容,如果未能解决你的问题,请参考以下文章

独占锁定文件,然后删除/移动它

[C#][转载]如何删除目录中的所有文件和文件夹

如何从 C# 中的文本文件中删除一行?

3 尝试使用 C# 删除 XML 节点

从C#中的数据中删除特殊字符后如何将dbf文件中的数百万行数据上传到SQL Server

我想从文件名中删除特殊字符而不影响 c# 中的扩展名