如何在Windows应用商店应用中复制文件夹

Tri*_*tan 3 windows-8 windows-store-apps windows-8.1

如何在Windows应用商店应用中复制文件夹及其内容?

我正在为Windows应用商店应用编写测试.该应用程序使用文件,因此需要一组已知文件.理想情况下,任何开发人员都可以运行这些测试,而无需他们进行一些手动设置.

我假设这意味着测试文件将被检入源代码控制,然后复制到LocalState测试可以使用它们的文件夹(在ClassInitialize测试阶段复制).

StorageFile具有复制功能.可以使用这些来递归重建要复制的文件夹.然而,很难相信这将是正确的方法......当然我错过了一些东西.

Tri*_*tan 5

这是粗糙的,没有经过彻底的测试.它以递归方式复制文件夹.对于名称冲突,它会覆盖现有文件和文件夹.

    public static async Task CopyAsync(
        StorageFolder source, 
        StorageFolder destination)
    {
        // If the destination exists, delete it.
        var targetFolder = await destination.TryGetItemAsync(source.DisplayName);

        if (targetFolder is StorageFolder)
            await targetFolder.DeleteAsync();

        targetFolder = await destination.CreateFolderAsync(source.DisplayName);

        // Get all files (shallow) from source
        var queryOptions = new QueryOptions
        {
            IndexerOption = IndexerOption.DoNotUseIndexer,  // Avoid problems cause by out of sync indexer
            FolderDepth = FolderDepth.Shallow,
        };
        var queryFiles = source.CreateFileQueryWithOptions(queryOptions);
        var files = await queryFiles.GetFilesAsync();

        // Copy files into target folder
        foreach (var storageFile in files)
        {
            await storageFile.CopyAsync((StorageFolder)targetFolder, storageFile.Name, NameCollisionOption.ReplaceExisting);
        }

        // Get all folders (shallow) from source
        var queryFolders = source.CreateFolderQueryWithOptions(queryOptions);
        var folders = await queryFolders.GetFoldersAsync();

        // For each folder call CopyAsync with new destination as destination
        foreach (var storageFolder in folders)
        {
            await CopyAsync(storageFolder, (StorageFolder)targetFolder);
        }
    }
Run Code Online (Sandbox Code Playgroud)

请有人有更好的答案.复制文件夹应该是对测试的.net API的单行调用.我们不应该都必须编写自己的函数或从Internet上复制粘贴未经测试的代码.