zoukankan      html  css  js  c++  java
  • C# 强制删除文件,解除占用的几点思考

    有一个古老的传说:
    占用的文件是可以被强制删除的。。。

    如果被别的应用程序打开着,你就要先找到那个打开的程序,结束掉才行。或者关闭关闭相关进程,延迟的方法。

    一般来说被占用就意味着有其它进行或者线程对该文件读或写操作。如果是自己的程序对该文件有文件流读写最好在完成或者异常的时候关闭流Close(),释放流Dispose(),后续才不会提示对此文件有占用;如果不是自己的程序原因引起文件的占用,则要重启一下电脑进行删除,如果仍然提示占用则要结束掉占用此文件的进程,才可以进行删除。

     

     解决方案1

    要检测文件被那个进程占用,需要使用微软提供的工具Handle.exe,这里有微软提供的下载

    我们可以在c#中调用Handle.exe 来检测到底哪个进程占用了文件

    string fileName = @"c:aaa.doc";//要检查被那个进程占用的文件
    
    Process tool = new Process();
    tool.StartInfo.FileName = "handle.exe";
    tool.StartInfo.Arguments = fileName+" /accepteula";
    tool.StartInfo.UseShellExecute = false;
    tool.StartInfo.RedirectStandardOutput = true;
    tool.Start();           
    tool.WaitForExit();
    string outputTool = tool.StandardOutput.ReadToEnd();
    
    string matchPattern = @"(?<=s+pid:s+)(d+)(?=s+)";
    foreach(Match match in Regex.Matches(outputTool, matchPattern))
    {
        Process.GetProcessById(int.Parse(match.Value)).Kill();
    }

    参考文章

    winform中,如何强制删除被占用文件

    jevan,  使用c#检测文件正在被那个进程占用

  • 相关阅读:
    导出数据到Excel文件
    百度地图
    Web报表-RDLC报表的使用
    web开发经验—MVC 图表Chart
    数据库面试题
    滑块插件jRange的使用
    matplotlib绘图使用数据
    JS面向对象之封装
    如何使用Animate.css插件库
    圣杯布局,双飞翼布局
  • 原文地址:https://www.cnblogs.com/arxive/p/7011568.html
Copyright © 2011-2022 走看看