Kha*_*laf -1 c# directory copy-paste file
我希望将目录作为复制/粘贴例程移动,方法是保持其结构不变.我不是只查找目录中所有子文件夹中的文件然后复制/粘贴它们(作为此解决方案),而是我想克隆整个事物并保持其结构(树 - >子文件夹和文件),确切地说像复制和粘贴例程.
所以我发现这个函数将一个装满文件的文件夹复制到一个新路径:
文件夹 - >文件
该函数的行为与复制/粘贴例程相同.它将SourcePath,DestinationPath和boolean值作为OverWriteExisting.很好,很小但是太糟糕了,没有标记为那个问题的实际答案(推荐费率).
但是,如果我想移动整个目录怎么办?换句话说,如果我有一个包含文件夹文件夹等文件夹的文件夹怎么办?也许不知道文件结构树的大小如下:
文件夹 - >文件夹 - > ... - >文件夹 - >文件
我使用以下例程来复制/粘贴具有文件夹的文件夹.但在这里我知道我只有一个级别的文件夹,因此只需要一个foreach循环:
foreach (var Folder in DestinationFolder) // here I know that I have only one level of folders to reach the files
{
CopyDirectory(FolderPath, DestinationPath, false); // use that function to copy the files
}
Run Code Online (Sandbox Code Playgroud)
上面的函数服务于这个目录结构:
文件夹 - >文件夹 - >文件
我试过这个并没有做我想做的事.我只检索所有文件,同时搜索所有子文件夹.这不是我想要的.我想保留子文件夹和原始结构.在这里,我得到四个文件,而不是原样构建的目录,子文件夹及其子文件夹,子文件夹,文件.只有四个,因为它删除了重复,我不希望这发生,因为我需要所有这些.
这是我目前的结构(但我的问题是任何目录的全局):
文件夹 - >文件夹 - >文件夹+文件
以下代码在新路径中执行的操作如下:
NewFolder - > AllFilesFoundInAnySubfolder
dialog.FileName = dialog.FileName.Replace(".xml", ""); // get the destination path
DirectoryInfo dirInfo = new DirectoryInfo(dialog.FileName);
if (dirInfo.Exists == false)
Directory.CreateDirectory(dialog.FileName);
List<String> EverythingInTheDirectory = Directory
.GetFiles(FileStructure.baseSessionPath + "\\" + SelectedSession.Name, "*.*", SearchOption.AllDirectories).ToList(); // source
foreach (string file in EverythingInTheDirectory)
{
FileInfo mFile = new FileInfo(file);
// to remove name collusion
if (new FileInfo(dirInfo + "\\" + mFile.Name).Exists == false)
mFile.MoveTo(dirInfo + "\\" + mFile.Name);
}
Run Code Online (Sandbox Code Playgroud)
如何移动未知大小的整个目录并保持其结构不变?不只获取目录中的文件并移动它们!
下面是一个示例,它将递归地将目录克隆到另一个目标目录.将来,将您尝试过的内容添加到当前问题中可以获得更好的响应
class Program
{
static void Main(string[] args)
{
CloneDirectory(@"C:\SomeRoot", @"C:\SomeOtherRoot");
}
private static void CloneDirectory(string root, string dest)
{
foreach (var directory in Directory.GetDirectories(root))
{
string dirName = Path.GetFileName(directory);
if (!Directory.Exists(Path.Combine(dest, dirName)))
{
Directory.CreateDirectory(Path.Combine(dest, dirName));
}
CloneDirectory(directory, Path.Combine(dest, dirName));
}
foreach (var file in Directory.GetFiles(root))
{
File.Copy(file, Path.Combine(dest, Path.GetFileName(file)));
}
}
}
Run Code Online (Sandbox Code Playgroud)