我對C#真的很陌生,所以我一直在研究一個小型的寵物項目。獲取目錄時System.UnauthorizedAccessException
我創建了一個小程序,將目錄的大小與給定的大小進行比較。如果該目錄等於或大於該目錄,則它將該路徑記錄到該目錄。
long size = Convert.ToInt32(Size) * 1024 * 1024;
string[] directories = Directory.GetDirectories(path, "*", SearchOption.AllDirectories); //the error occurs on this line
Array.Sort(directories);
foreach (string name in directories)
try
{
DirectoryInfo directory = new DirectoryInfo(name);
long dir = directory.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length);
if (dir >= ScanSize)
Console.WriteLine(directory);
}
catch (UnauthorizedAccessException) { }
我應該注意的是,輸入的字符串,而long size = Convert.ToInt32(Size)
在Main()
來自論據,我讀的地方,我不應該使用
Directory.GetDirectories(ScanPath, "*", SearchOption.AllDirectories);
自它會一次獲得所有的目錄。但是如果我刪除它,它只會得到給定路徑中的目錄,沒有任何子目錄。所以我被告知申請遞歸,但是我發現這些很難。我在file.Attributes
上閱讀了關於隱藏文件的一些內容,但我不知道在哪裏應用它們。
我是系統的管理員,我打算在整個數據驅動器上運行此操作。 D:\
但是在這種情況下,當程序試圖訪問D:\的垃圾桶時發生錯誤。但即使它跳過了這個特定位置,錯誤仍然會在另一個不可訪問的位置返回。
我希望這裏的任何人都知道一個很好的例子或知道一個網站,解釋這一點。
有幾件事情要記住:1)您將無法訪問某些操作系統目錄只允許操作系統本身來訪問,而不是任何其他用戶帳戶,所以這可能是爲什麼。 2)如果您正在查看網絡目錄,您的帳戶可能沒有權限訪問它們,這也是原因。 3)如果您在ASP.NET/MVC中使用此代碼,那麼它將在應用程序池帳戶下運行,並且可能是目錄沒有根據允許添加用戶帳戶。你也沒有在你的代碼中指定你開始的初始路徑 –
看看這個:http://stackoverflow.com/a/929418/425871 – Steve
@Ahmedilyas我已經添加了一些更多的信息的問題。我希望這更清楚一點。 – user3095385