次のコードがあります。
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
ソースからファイルをコピーするときに見つからないと言っています。これを処理する方法がわからない。