我有以下代码:
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));
上面的问题,是我不知道如何判断文件是如何嵌套的,例如,如果它是 under c:\App\Custom\thumbs.db
,我认为它可以正常工作,但如果它是 under 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
它说从源复制文件时找不到。不知道如何处理。