Javascript 如何替换当前打开的文件?

Javascript 如何替换当前打开的文件?,javascript,windows,uwp,storagefile,storagefolder,Javascript,Windows,Uwp,Storagefile,Storagefolder,实际上,我正在应用程序中处理pdf文档。 我正在将要读取的pdf文件存储在应用程序的本地文件夹中。 这个文件在整个应用程序中都被使用,所以我认为这个文件在整个应用程序中都保持打开状态。当我想用一个新的文件替换这个文件时,它会给我带来错误,我想原因是这个文件正在使用中。我找不到任何关闭此文件的选项。是否仍然需要关闭从pdfDocument类的loadFromFileAsync方法打开的文件?或者是否有其他方法替换正在使用的文件 var loc = Windows.Storage.Applicati

实际上,我正在应用程序中处理pdf文档。 我正在将要读取的pdf文件存储在应用程序的本地文件夹中。 这个文件在整个应用程序中都被使用,所以我认为这个文件在整个应用程序中都保持打开状态。当我想用一个新的文件替换这个文件时,它会给我带来错误,我想原因是这个文件正在使用中。我找不到任何关闭此文件的选项。是否仍然需要关闭从pdfDocument类的loadFromFileAsync方法打开的文件?或者是否有其他方法替换正在使用的文件

var loc = Windows.Storage.ApplicationData.current.localFolder;
var picker = new Windows.Storage.Pickers.FileOpenPicker();
var pdf;

function newFile() {
    picker.fileTypeFilter.append(".pdf");
    picker.pickSingleFileAsync().then(
        function (f) {
            f.copyAsync(loc, "main.pdf", Windows.Storage.NameCollisionOption.replaceExisting).done(
                function (f1) {
                    Windows.Data.Pdf.PdfDocument.loadFromFileAsync(f1).then(
                        function (file) {
                            pdf = file;
                            Windows.UI.Popups.MessageDialog("loaded " + pdf).showAsync();
                            document.getElementById("btn").onclick = newFile;
                            });
                        },
                        function (e) {
                            Windows.UI.Popups.MessageDialog("Error: " + e).showAsync();
                        });
                });
    }
newFile();
名为main.pdf的文件存储在应用程序的本地文件夹中。 上面的代码正在重新创建应用程序中出现的问题。因此,在上面的代码中,当启动应用程序时,会调用newFile方法,并用新的main.pdf文件替换本地文件夹中的main.pdf文件。但是,当在应用程序中再次调用newFile方法时,在替换main.pdf文件时会出现一个未指明的错误

我认为,要替换的文件是由PdfDocument类操作的,这是错误的原因,因为当我不从PdfDocument类的loadFromFileAsync方法加载此文件时,newFile方法第二次也可以正常工作。 完成这项工作的方法是什么

您在newFile之外声明了pdf变量,但该变量引用了newFile方法中的pdf文件。当调用newFile方法完成时,此变量尚未释放

为了解决您的问题,您可以在newFile方法中声明此pdf变量


请发布代码,LoadFromFileAsync不应保持文件处于打开状态,因此如果问题不在某个地方,则值得调查else@MartinZikmund很抱歉,回复太晚了,代码已添加,请检查。我认为您应该打开保存picker@Iindexi保存选择器将能够在用户指定的位置保存文件,我不希望这样。哦,正确!但更好的方法是让pdf变量是全局变量,并在newFile中用null初始化它;方法
function newFile() {
    var pdf;
    picker.fileTypeFilter.append(".pdf");
    picker.pickSingleFileAsync().then(
        function (f) {
            f.copyAsync(loc, "main.pdf", Windows.Storage.NameCollisionOption.replaceExisting).done(
                function (f1) {
                    Windows.Data.Pdf.PdfDocument.loadFromFileAsync(f1).then(
                        function (file) {
                            pdf = file;
                            Windows.UI.Popups.MessageDialog("loaded " + pdf).showAsync();

                        });
                },
                function (e) {
                    Windows.UI.Popups.MessageDialog("Error: " + e).showAsync();
                });
        });
}