首先,我想说我喜欢这个网站。这些年来,它一直非常有帮助。
当前,我在桌面C:\Users\Donjf\Desktop\New folder
上有一个文件夹,在桌面上的该文件夹中,有一个名为DVNSHP012的子文件夹或目录,其中包含xml
文件。 C:\Users\Donjf\Desktop\New folder
也包含xml
个文件。
我目前只能使用以下代码从xml
的主目录传输C:\Users\Donjf\Desktop\New folder
文件。
//Copy all the files & Replaces any files with the same name foreach (string newPath in Directory.GetFiles(DESKTOPLHA54U4, "*.xml", SearchOption.AllDirectories)) File.Copy(newPath, newPath.Replace(DESKTOPLHA54U4, path), true);
以上代码再次仅从C:\Users\Donjf\Desktop\New
文件夹的主目录传输,而不从包括C:\Users\Donjf\Desktop\New folder\DVNSHP012
的整个目录传输。我目前正在尝试搜索所有子目录,包括.xml
文件的主目录,然后将那些xml's
转移到\downloads\
这是我到目前为止尝试过的。
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
{
TestWebMsgApp.WebMsgBox.Show("Folder created in root of drive");
}
foreach (string dirPath in Directory.GetDirectories(DESKTOPLHA54U4, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(DESKTOPLHA54U4, path));
if (Directory.Exists(DESKTOPLHA54U4))
{
//Copy all the files & Replaces any files with the same name
foreach (string newPath in Directory.GetFiles(DESKTOPLHA54U4, "*.xml",
SearchOption.AllDirectories))
File.Copy(newPath, newPath.Replace(DESKTOPLHA54U4, path), true);
}
}
在这里发布之前,我也尝试过搜索整个google和SO,但似乎与我的特定问题无关。有没有办法搜索所有* .xml文件,包括子目录?预先感谢您的任何帮助。
答案 0 :(得分:0)
您的代码应该可以正常工作,您只需要添加在目标文件夹中创建(子)目录的代码,因为File.Copy()
不会创建它们(如果尚不存在)。这对我有用:
var DESKTOPLHA54U4 = @"C:\Users\Donjf\Desktop\New folder\";
var path = @"C:\downloads\";
foreach (string newPath in Directory.GetFiles(DESKTOPLHA54U4, "*.xml", SearchOption.AllDirectories))
{
// Ensure that target subdirectory exists
Directory.CreateDirectory(Path.GetDirectoryName(newPath.Replace(DESKTOPLHA54U4, path)));
File.Copy(newPath, newPath.Replace(DESKTOPLHA54U4, path), true);
}
或者,您可以创建递归复制目录(和子目录)的方法:
public static void CopyDirectory(string sourceDirectory, string destinationDirectory, string fileSearchPattern)
{
// Ensures that (sub)target directory exists.
Directory.CreateDirectory(destinationDirectory);
foreach (string subDir in Directory.EnumerateDirectories(sourceDirectory))
{
// Recursively call CopyDirectory() for all subdirectories
CopyDirectory(
subDir,
Path.Combine(destinationDirectory, Path.GetFileName(subDir)),
fileSearchPattern);
}
foreach (string file in Directory.EnumerateFiles(sourceDirectory, fileSearchPattern, SearchOption.TopDirectoryOnly))
{
File.Copy(
file,
Path.Combine(destinationDirectory, Path.GetFileName(file)),
true);
}
}
并命名为:
CopyDirectory(@"C:\Users\Donjf\Desktop\New folder\", @"C:\downloads\", "*.xml");