Как заменить файл, который открыт в данный момент? - PullRequest
0 голосов
/ 16 февраля 2019

Я на самом деле работаю с PDF-документами в моем приложении.Я храню PDF-файл, который нужно прочитать в папке Local приложения.Этот файл используется в приложении, поэтому я думаю, что этот файл остается открытым в приложении.Когда я хочу заменить файл новым, это выдает мне ошибку, и я думаю, что причина в том, что файл используется.Я не могу найти какой-либо вариант, чтобы закрыть этот файл.Есть ли в любом случае закрыть файл, открытый из метода loadFromFileAsync () класса pdfDocument?или есть какой-либо другой способ заменить используемый файл.

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, и это является причиной ошибки, потому что, когда я не загружаю этот файл из метода loadFromFileAsync () класса PdfDocument,Метод newFile () также отлично работает во второй раз.Как сделать эту работу?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы объявляете переменную pdf вне newFile(), но эта переменная ссылается на файл PDF в методе newFile().После завершения вызова метода newFile() эта переменная не была освобождена.

Чтобы решить эту проблему, вы можете объявить эту переменную pdf в методе newFile().

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