代码之家  ›  专栏  ›  技术社区  ›  Greg Finzer

进程无法访问该文件,因为另一进程正在使用该文件

c#
  •  24
  • Greg Finzer  · 技术社区  · 15 年前

    我有一套每晚的报告。

    有时我会得到例外:

    进程无法访问该文件,因为另一进程正在使用该文件

    我如何判断文件的保存过程?我想是麦卡菲,但我需要证明。

    10 回复  |  直到 9 年前
        1
  •  19
  •   Greg Finzer    15 年前

    问题是.NET中的mailmessage保留了文件附件。我必须对附件进行处理,然后它才起作用。

        2
  •  9
  •   C. Ross trotttrotttrott    15 年前

    使用类似工具 Process Explorer Process Monitor .

        3
  •  3
  •   Kyle Trauberman pestades    13 年前
    Attachment data = new Attachment(@"c:\filename");
    
    'send email....
    
    data.Dispose();    
    
        4
  •  1
  •   Kamarey    15 年前

    以下是一些工具,用于通知和解锁锁定的文件: http://ccollomb.free.fr/unlocker/

        5
  •  1
  •   Markus Amalthea Magnuson Mohit Verma    9 年前

    证实。我也遇到了类似的问题,按格雷格说的做了。

    finally 阻止发送消息后,我将其放入其中,然后释放文件句柄:

    foreach(Attachment a in message.Attachments) a.Dispose();
    
        6
  •  0
  •   Carra    15 年前
    1. Process Explorer >查找>查找 handle>键入文件名。
    2. Unlocker . 试着打开它,如果它 有锁,解锁器会打开 向您展示锁定它的程序。
        7
  •  0
  •   Gavin Crawley    13 年前

    在释放后gc.collect()应该修复它

        8
  •  0
  •   Baruch Atta    12 年前

    我试图启动一个Java程序并得到消息。在任务管理器中,已经有一个Java任务正在运行(循环?)当我杀死那个进程时,我的进程能够运行。

        9
  •  0
  •   Komengem    12 年前

    我也遇到了同样的问题,但在我的例子中,我试图删除visul studio 2012中的一个.mdf文件。没有太多关于错误的信息来帮助我解决这个问题,所以我来这里寻求帮助。然后我意识到,尽管这是一个类似的问题,但我必须处理的是一个相当不同的过程。

    我所做的是尝试在Windows资源管理器中删除.mdf文件,然后我给了我一个错误,即SQL Server 2008 R2实际上保留了该文件,即使我删除了数据库。一旦我有了新功能,我所要做的就是关闭SQL Server 2008 R2,然后再次尝试删除该文件,它就工作了。

    如果需要有关如何打开和关闭SQL Server 2008 R2的说明,请参阅下面的链接。

    Turn on and off SQL Server

        10
  •  0
  •   tjd    9 年前

    Filemon 可能是你要找的工具。

    (甚至) Process Monitor 显然已经取代了filemon。)