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

时间:2019-02-16 15:17:33

标签: javascript windows uwp storagefile storagefolder

我实际上在我的应用程序中使用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( )方法也可以第二次正常使用。 完成这项工作的方式是什么?

1 个答案:

答案 0 :(得分:1)

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

要解决您的问题,可以在newFile()方法中声明此pdf变量。

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();
                });
        });
}