复制目录及其内容异步(Copy directories and their contents async)

编程入门 行业动态 更新时间:2024-10-20 03:21:43
复制目录及其内容异步(Copy directories and their contents async)

我在MSDN上找到了这个解决方案,它可以将文件从一个目录复制到另一个目录,但它只从主目录而不是子目录复制。

如何修改此解决方案,以便复制所有文件夹及其内容?

string StartDirectory = @"C:\Users\..."; string EndDirectory = @"C:\Users\...."; //Creates all of the directories and sub-directories foreach (string dirPath in Directory.GetDirectories(StartDirectory, "*", SearchOption.AllDirectories)) Directory.CreateDirectory(dirPath.Replace(StartDirectory, EndDirectory)); foreach (string filename in Directory.EnumerateFiles(StartDirectory)) { using (FileStream SourceStream = File.Open(filename, FileMode.Open)) { using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\')))) { await SourceStream.CopyToAsync(DestinationStream); } } }

I have found this solution on MSDN that can copy files from a one directory to another, but it only copies from the main directory and not the sub-directories.

How can I modify this solution so it will also copy all of the folders and their contents?

string StartDirectory = @"C:\Users\..."; string EndDirectory = @"C:\Users\...."; //Creates all of the directories and sub-directories foreach (string dirPath in Directory.GetDirectories(StartDirectory, "*", SearchOption.AllDirectories)) Directory.CreateDirectory(dirPath.Replace(StartDirectory, EndDirectory)); foreach (string filename in Directory.EnumerateFiles(StartDirectory)) { using (FileStream SourceStream = File.Open(filename, FileMode.Open)) { using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\')))) { await SourceStream.CopyToAsync(DestinationStream); } } }

最满意答案

展开第一个循环以包围内部循环,它应该工作。 您正在使用第一个for循环搜索所有文件夹,但仅枚举顶级文件夹中的文件。 您还需要枚举每个子文件夹中的文件。 此外,在这种情况下,DirectoryInfo将比Directory更容易使用。

DirectoryInfo StartDirectory = new DirectoryInfo(@"C:\Users\..."); DirectoryInfo EndDirectory = new DirectoryInfo(@"C:\Users\...."); //Creates all of the directories and sub-directories foreach (DirectoryInfo dirInfo in StartDirectory.GetDirectories("*", SearchOption.AllDirectories)) { string dirPath = dirInfo.FullName; string outputPath = dirPath.Replace(StartDirectory.FullName, EndDirectory.FullName); Directory.CreateDirectory(outputPath); foreach (FileInfo file in dirInfo.EnumerateFiles()) { using (FileStream SourceStream = file.OpenRead()) { using (FileStream DestinationStream = File.Create(outputPath + file.Name)) { SourceStream.CopyToAsync(DestinationStream); } } } }

solved it with two loops, one for all of the sub-directories (the first) and one for the main directory:

foreach (string dirPath in Directory.GetDirectories(StartDirectory, "*", SearchOption.AllDirectories)) { Directory.CreateDirectory(dirPath.Replace(StartDirectory, EndDirectory)); foreach (string filename in Directory.EnumerateFiles(dirPath)) { using (FileStream SourceStream = File.Open(filename, FileMode.Open)) { using (FileStream DestinationStream = File.Create(filename.Replace(StartDirectory, EndDirectory))) { await SourceStream.CopyToAsync(DestinationStream); } } } } foreach (string filename in Directory.EnumerateFiles(StartDirectory)) { using (FileStream SourceStream = File.Open(filename, FileMode.Open)) { using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\')))) { await SourceStream.CopyToAsync(DestinationStream); } } }

更多推荐

本文发布于:2023-08-04 05:32:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1410141.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:目录   内容   Copy   async   contents

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!