簡體   English   中英

Explorer.exe鎖定創建的文件->對Directory.Move的訪問被拒絕

[英]Explorer.exe locks created file --> access denied for Directory.Move

我遇到以下問題,是的,我在網上瀏覽了大約1個小時,沒有發現任何可以解決我的問題的方法。

我有一個包含約100個文件的文件夾,稱為“媒體”。 在我的Delphi Setup.exe中(在C#中也無法使用),我允許用戶通過簡單地將其重命名為他想要的名稱(例如“ media_v1”)來備份此“ media”文件夾。 而且效果很好。

如果我在此“媒體”文件夾中創建一個新文件,它也可以是一個空txt,則重命名過程不再起作用。 出現錯誤“ 5訪問被拒絕”。

現在,我在網上尋找了一些幫助,發現它可以通過其他進程鎖定,依此類推。 事實:

甚至Process Explorer也不會顯示鎖定任何文件的任何句柄或dll,但是如果我之前殺死過資源管理器任務,它將再次正常工作。

    private void button1_Click(object sender, EventArgs e)
    {

        Directory.Move(@"D:media\folder", @"D:\media\folder_v1");
    }

有什么建議么?

非常感謝!

這是一個SSCCE ,可以證明您的方法非常有效。 這個示例可以正常工作,並不代表您向我們展示的內容超出了您的代碼范圍。 您正在執行的其他操作導致了問題。 必須在您的程序中向我們顯示相關代碼。 更好的是,自己制作一個SSCCE來演示問題。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Original Directory Contents  : ");
        string[] fileEntries = Directory.GetFiles(@"C:\Test\stuff");
        foreach (string fileName in fileEntries) 
            Console.WriteLine(fileName);

        Console.WriteLine("Moving Directory... ");
        Directory.Move(@"C:\Test\stuff", @"C:\Test\stuff2");

        Console.WriteLine("Creating New File... ");
        File.WriteAllText(@"C:\Test\stuff2\new.txt", "test");

        Console.WriteLine("New Directory Contents  : ");
        fileEntries = Directory.GetFiles(@"C:\Test\stuff2");
        foreach (string fileName in fileEntries)
            Console.WriteLine(fileName);

        Console.WriteLine("Moving Directory... ");
        Directory.Move(@"C:\Test\stuff2", @"C:\Test\stuff");
        fileEntries = Directory.GetFiles(@"C:\Test\stuff");
        foreach (string fileName in fileEntries)
            Console.WriteLine(fileName);
    }
}

輸出:

在此處輸入圖片說明

通過替換來重復測試:

    Console.WriteLine("Creating New File... ");
    File.WriteAllText(@"C:\Test\stuff2\new.txt", "test");

    Console.ReadLine();

並在資源管理器中手動創建一個新的文本文件,然后繼續執行該程序也不會出現問題。

我可以確認Michel在最新補丁級別為05/2014的Windows XP SP3上描述的問題。 我有許多不同的PC都在遭受這個確切的問題。

它一定是Windows中的錯誤,因為殺死和重新啟動“ explorer.exe”每次都可以提供幫助。

相信我,您的代碼沒有錯。

也許explorer.exe遇到了某種形式的句柄泄漏。

我通過殺死並重新啟動腳本中的explorer.exe來解決此錯誤(丑陋,但尚無更好的方法)

也許您可以嘗試使用解鎖工具來釋放手柄。 遇到問題時,您使用哪個操作系統?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM