如何加快目录的移动过程?

How to speed up the moving process of a directory?

由于 StorageFolder 没有任何功能可以移动到 UWP 中的另一个目的地 API,我创建了自己的文件夹:

        public static async Task MoveTo(this StorageFolder source, StorageFolder destination, string folderName, CreationCollisionOption creationCollisionOption = CreationCollisionOption.GenerateUniqueName, NameCollisionOption nameCollisionOption = NameCollisionOption.GenerateUniqueName) {
          StorageFolder root = await destination.CreateFolderAsync(folderName, CreationCollisionOption.ReplaceExisting);
          destination = root;

          foreach(StorageFile file in await source.GetFilesAsync()) {
            await file.MoveAsync(destination, file.Name, NameCollisionOption.ReplaceExisting);
          }

          foreach(StorageFolder folder in await source.GetFoldersAsync()) {
            await MoveTo(folder, destination, folder.Name);
          }
        }

不幸的是,这段代码真的很慢。移动956个文件和25个文件夹大约需要20-25分钟。

我确定问题是因为它是通过 Task.

逐一处理的

有人可以给我一些建议吗?非常感谢您。

您可以使用并行技术获得更好的结果(我不会在这里展示它,因为它并没有那么快)但是您可以做得更好很多使用 Win32 API MoveFileFromAppW 如果你 P/Invoke 它。只要您拥有访问权限(例如,由 FolderPicker 授予),这将适用于 UWP。

如果目标与源位于同一驱动器上,几乎可以立即执行(这是一个简单的重命名)。如果它们位于不同的驱动器上,您将需要执行一些逻辑来创建每个目录 (CreateDirectoryFromAppW),然后移动文件。它仍然比用户 StorageFile.

快得多