1

次のコードがあります。

var directories =  Directory.GetDirectories(
        environmentSettings.SourcePath, 
        "*",
        SearchOption.AllDirectories)
    .Where(dir => !environmentSettings.FolderExclusions
                                      .Contains(Path.GetFileName(dir)));

除外リストに表示されるディレクトリを除いて、ターゲット パスにディレクトリを作成したいと考えています。これは機能しますが、ディレクトリがルートの直下にあり、サブディレクトリが含まれていない場合のみです。

例として、除外リストに というディレクトリが含まれてCustomおり、ルート ディレクトリがC:\Appである場合、除外C:\App\Customされてターゲット パスに作成されませんが、 のようなものに遭遇するとすぐに、ターゲット パスにC:\App\Custom\Subこれが作成されます。

ファイルに対しては機能しません:

//すべてのファイルをコピー

var files = Directory.GetFiles(environmentSettings.SourcePath, "*", SearchOption.AllDirectories)
      .Select(file => new FileInfo(file))
      .Where(file => !environmentSettings.FolderExclusions
                                         .Contains(file.Name) && 
                     !environmentSettings.FolderExclusions
                                         .Contains(file.Directory.Name));

上記の問題は、ファイルがどのようにネストされているかを知る方法がわからないことですc:\App\Custom\thumbs.db.c:\App\Custom\sub1\sub2\thumbs.dbそれは私が望んでいないことです。基本的に、ディレクトリをすぐ下に取得する必要があり、それが のc:\App場合はCustom、ファイルを除外します。

var files = Directory.GetFiles(environmentSettings.SourcePath, "*", SearchOption.AllDirectories)
            .Select(file => new FileInfo(file))
            .Where(file => !environmentSettings.FolderExclusions.Contains(file.Directory.Name) && (file.Directory.Parent == null || !environmentSettings.FolderExclusions.Contains(file.Directory.Parent.Name)));

次のコードを実行してすべてのファイルをループし、それらをターゲット ディレクトリに配置すると、Directory not found 例外が発生します。

//Copy all the files
foreach (var file in files)
{
File.Copy(file.Name, file.FullName.Replace(environmentSettings.SourcePath, environmentSettings.TargetPath));
}

問題は、ソース ファイルが \network\app1\one.mp3 のようなもので、ターゲット ディレクトリが c:\programdata\myapp である可能性があることです。one.mp3ソースからファイルをコピーするときに見つからないと言っています。これを処理する方法がわからない。

4

1 に答える 1

3

これが親フォルダーと最初のサブフォルダーのみに当てはまる場合は、これを試してください。

var directories =  Directory.GetDirectories(environmentSettings.SourcePath, "*", SearchOption.AllDirectories)
    .Select(dir => new DirectoryInfo(dir))
    .Where(dir=>!excludes.Contains(dir.Name) && (dir.Parent == null || !excludes.Contains(dir.Parent.Name)));

ファイルでこれを有効にするには、次のことを試してください

var files = Directory.GetFiles(sourcePath, "*", SearchOption.AllDirectories)
    .Select(file => new FileInfo(file))
    .Where(file=>!excludes.Contains(file.Directory.Name) && (file.Directory.Parent == null || !excludes.Contains(file.Directory.Parent.Name)));
于 2012-09-28T20:06:12.803 に答える