我正在尝试解决我为加速工作而编写的应用程序的问题。这个想法是基于文件扩展名,使用WinForm应用程序自动组织我的文件夹结构(将文件从源文件夹复制到目标文件夹)。问题是我最近开始使用C#进行编码,但找不到在文件夹结构中处理嵌套重复文件的方法。
树形结构示例
| Analysis.xls
| Handoff request.msg
| Reference documentation.doc
|
\---Trados package
+---DE
| Translation text.sdlxliff
|
+---EN
| Translation text.sdlxliff
|
+---FR
| Translation text.sdlxliff
|
+---SV
| Translation text.sdlxliff
|
\---TM
+---DE
| Ref TM.sdltm
|
+---FR
| Ref TM.sdltm
|
\---SV
Ref TM.sdltm
我已经设法编译了一个解决方案(基于这里的一些好的建议)来帮助我解决唯一文件的问题,但是我无法处理嵌套在语言文件夹中的重复文件。
{
var sourcePath = @"C:\Users\Home\Desktop\source";
var targetPath = @"C:\Users\Home\Desktop\target";
var extensions = new[] { ".sdlxliff", ".mqxliff", ".sdltm", ".tmx" };
var files = (from file in System.IO.Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
where extensions.Contains(System.IO.Path.GetExtension(file), StringComparer.InvariantCultureIgnoreCase)
select new
{
Source = file,
Destination = System.IO.Path.Combine(targetPath, System.IO.Path.GetFileName(file))
});
{
foreach (var file in files)
File.Copy(file.Source, file.Destination);
MessageBox.Show("Done", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
预期结果是将复制的文件和其父文件夹一起复制到目标文件夹中(即,如果我要从源目录“ C:\ Users \ Home \ Desktop \ source”复制Translation text.sdlxliff \ Trados包\ DE”,则应将文件添加到以下目标文件夹“ C:\ Users \ Home \ Desktop \ target \ Trados包\ DE”中。TM文件夹和所有嵌套文件也应如此在里面。
感谢您的建议。
答案 0 :(得分:1)
不是将目标路径与源文件名组合在一起,而是将源基本文件夹完全替换为目标基本文件夹:
Destination = file.Replace(sourcePath, targetPath)
然后,在复制之前,请确保目录存在:
foreach (var file in files)
{
Directory.CreateDirectory(Path.GetDirectoryName(file.Destination));
File.Copy(file.Source, file.Destination);
}
如果目录已经存在,CreateDirectory将返回而不会出现错误。
或者,请参见用于复制this related answer中的整个目录的通用解决方案