お願いします!私は問題があります。 コード:DirectoryInfo.GetFiles()エラー:System.UnathorizedAccessException
...
currentDirectory = new DirectoryInfo(absoluteCurrentPath);
FileInfo[] allFiles = currentDirectory.GetFiles("*", SearchOption.AllDirectories);
model.AllFiles = new List<MyFile>();
foreach (var f in allFiles)
{
model.AllFiles.Add(new MyFile(f.Name, f.FullName, Utilites.ConvertBytesToMegabytes(f.Length)));
}
DirectoryInfo CurrentDirectory = "C:\\"
かは、エラーを除いて、システムファイルと他のディレクトリに等しい:System.UnathorizedAccessExceptionを。 ブロックtry-catchを取ると、GetFiles()
をスキップするだけです。 どのようにすべてのファイルを取得し、システムファイルのみをスキップするか、ファイルをスキップせずにすべてのファイルを取得できますか? ありがとう!
public static IEnumerable<FileInfo> EnumerateFiles(string path, string searchPattern = null)
{
searchPattern = searchPattern ?? "*";
var queue = new Queue<string>();
queue.Enqueue(path);
do
{
path = queue.Dequeue();
foreach (var file in SafeEnumerateFiles(path, searchPattern))
{
yield return new FileInfo(file);
}
foreach (var directory in SafeEnumerateDirectories(path))
{
queue.Enqueue(directory);
}
}
while (queue.Any());
}
static IEnumerable<string> SafeEnumerateFiles(string path, string searchPattern)
{
try
{
return Directory.EnumerateFiles(path, searchPattern);
}
catch (DirectoryNotFoundException) { }
catch (SecurityException) { }
catch (UnauthorizedAccessException) { }
return Enumerable.Empty<string>();
}
static IEnumerable<string> SafeEnumerateDirectories(string path)
{
try
{
return Directory.EnumerateDirectories(path);
}
catch (DirectoryNotFoundException) { }
catch (SecurityException) { }
catch (UnauthorizedAccessException) { }
return Enumerable.Empty<string>();
}
方法は、あなたが権限を持っていないフォルダはスキップ:私はいくつかの時間前に書いた方法があり
あなたはあなたのプロジェクトを実行していますか?私はあなたが直接 'C'ディスクにアクセスする許可を持っていないことを知っていた –