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