Javascript 正在将应用程序包文件夹复制到Windows应用商店应用程序的独立存储

Javascript 正在将应用程序包文件夹复制到Windows应用商店应用程序的独立存储,javascript,windows-phone-8,windows-store-apps,winjs,windows-rt,Javascript,Windows Phone 8,Windows Store Apps,Winjs,Windows Rt,我正在尝试将应用程序包文件夹复制到独立存储。这就是我带来的。我收到一个javascript错误,无法创建已经存在的文件。我在遍历子文件夹时遇到问题 var root = Windows.ApplicationModel.Package.current.installedLocation; copySubDirectories(root); function copySubDirectories(subFolder) { currentFolder.crea

我正在尝试将应用程序包文件夹复制到独立存储。这就是我带来的。我收到一个javascript错误,无法创建已经存在的文件。我在遍历子文件夹时遇到问题

    var root = Windows.ApplicationModel.Package.current.installedLocation;
    copySubDirectories(root);
    function copySubDirectories(subFolder) {
        currentFolder.createFolderAsync(subFolder.name).done(function (newFolder1) {
            subFolder.getFilesAsync().done(function (fileList1) {
                if (fileList1==null) {
                    subFolder.getFoldersAsync().done(function (folderList1) {
                        folderList1.forEach(function (subFolder2) {
                            currentFolder = newFolder1;
                            copySubDirectories(subFolder2);
                        });
                    });
                    return;
                }

                fileList1.forEach(function (subFile1) {
                    subFile1.copyAsync(newFolder1, subFile1.name, Windows.Storage.NameCollisionOption.replaceExisting).done(function () {
                        subFolder.getFoldersAsync().done(function (folderList1) {
                            folderList1.forEach(function (subFolder2) {
                                currentFolder = newFolder1;
                                copySubDirectories(subFolder2);
                            });
                        });
                    });
                });
            });
        });
    }
}

我将filelist和folderlist混合在一起,导致应用程序崩溃。为每个流程创建函数是解决方案

var sourceFolder = Windows.ApplicationModel.Package.current.installedLocation;
var destinationFolder = Windows.Storage.ApplicationData.current.localFolder;



copyDirectories(sourceFolder,destinationFolder);


function copyFiles(source, destination) {
    source.getFilesAsync().done(function (fileList) {
        if (fileList.size >= 1) {
            fileList.forEach(function (subFile) {
                subFile.copyAsync(destination, subFile.name, Windows.Storage.NameCollisionOption.replaceExisting).done(function () { });
            });
        }
    });
}

function copyDirectories(source,destination){
    source.getFoldersAsync().done(function (folderList) {
        if(folderList.size>1){

            folderList.forEach(function (subFolder) {
                destination.createFolderAsync(subFolder.name).done(function (newFolder) {         


                    copyFiles(subFolder, newFolder);
                        copyDirectories(subFolder,newFolder);

                });
            });
        }
    });
}

我很好奇你为什么要复制整个软件包文件夹,包括所有的代码等等。?似乎您主要只对复制数据子文件夹感兴趣,这样您就可以使用包内容作为基础,然后在运行时更新数据。诚然,在JS应用程序中,代码通常没有那么大;不过,这里的方法意味着您要复制启动屏幕图像、库等,这只会浪费存储空间。