是否排除包含子目录的目录



我有以下代码:

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

我想在目标路径中创建一个目录,但排除列表中显示的目录除外。这是有效的,但前提是目录直接位于根目录下并且不包含子目录。

例如,如果排除列表包含一个名为Custom的目录,而根目录是C:App,它将排除C:AppCustom,而不在目标路径中创建它,但一旦遇到类似C:AppCustomSub的内容,它就会在目标路径上创建它。

无法将其用于文件:

//复制的所有文件

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:AppCustomthumbs.db下,我认为它工作得很好,但如果它在c:AppCustomsub1sub2thumbs.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)));

当我运行以下代码循环浏览所有文件并将它们放在目标目录中时,我会遇到一个未找到目录的异常:

//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。不知道如何处理。

如果这只适用于父文件夹和第一个子文件夹,请尝试此操作:

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)));

最新更新