4

プログラムがアクセスできるすべてのファイルとフォルダーを一覧表示し、それらをテキスト ファイルに書き込みたいと考えています。どうすればリストを取得できますか? アクセスできないフォルダーで UnauthorizedAccessExceptions をキャッチするかスローしない方法が必要です。

4

5 に答える 5

9

コードを使用してみてください:

private static IEnumerable<string> Traverse(string rootDirectory)
{
    IEnumerable<string> files = Enumerable.Empty<string>();
    IEnumerable<string> directories = Enumerable.Empty<string>();
    try
    {
        // The test for UnauthorizedAccessException.
        var permission = new FileIOPermission(FileIOPermissionAccess.PathDiscovery, rootDirectory);
        permission.Demand();

        files = Directory.GetFiles(rootDirectory);
        directories = Directory.GetDirectories(rootDirectory);
    }
    catch
    {
        // Ignore folder (access denied).
        rootDirectory = null;
    }

    if (rootDirectory != null)
        yield return rootDirectory;

    foreach (var file in files)
    {
        yield return file;
    }

    // Recursive call for SelectMany.
    var subdirectoryItems = directories.SelectMany(Traverse);
    foreach (var result in subdirectoryItems)
    {
        yield return result;
    }
}

クライアントコード:

var paths = Traverse(@"Directory path");
File.WriteAllLines(@"File path for the list", paths);
于 2012-09-08T17:07:49.870 に答える
0

Serge が提案した Traverse と DriveInfo クラスを使用すると、PC で利用可能なすべてのファイルにアクセスできます。

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (DriveInfo d in allDrives)
{
   if (d.IsReady == true)
   {
      var paths = Traverse(d.Name);
      File.AppendAllLines(@"File path for the list", paths);
   }
}
于 2012-09-08T17:34:34.633 に答える