[英]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.