Чтение файловой системы HTML5 после обновления каталога

Я пытаюсь создать динамический интерфейс для взаимодействия с файловой системой HTML5 в Chrome Canary, но сейчас натыкаюсь на камень преткновения.

я использую

dirReader.readEntries(function (entries) {
        if (!entries.length){
            return;
        }
        for (var i = 0 ; i < entries.length; i++){

            $scope.files.push(entries[i]);
        }

        dirReader.readEntries();

    }, errorHandler);

чтобы получить их в первый раз, который отлично работает. Но если я создам новый файл и снова запущу код, он ничего не вернет.

Я предполагаю, что он использует старую ссылку на файловую систему или что-то в этом роде, поэтому я предполагаю, что мне нужно повторно инициализировать файловую систему или программу чтения каталогов (это предположение)? Как лучше всего решить эту проблему?

Редактировать: получение новой ссылки на файловую систему действительно работает, но меня немного тошнит. Лучший способ сделать это все равно будет превосходным.


person No Context    schedule 15.05.2013    source источник


Ответы (1)


Отличный веб-сайт HTML5rocks для обработки файлов.

Чтобы прочитать содержимое каталога, создайте DirectoryReader и вызовите его метод readEntries(). Нет никакой гарантии, что все записи каталога будут возвращены при одном вызове readEntries(). Это означает, что вам нужно продолжать вызывать DirectoryReader.readEntries() до тех пор, пока не перестанут возвращаться результаты.

Я прочитал, что это означает, что DirectoryReader — это одноразовый объект. После того, как вы прочтете его, вы больше не получите от него никаких данных. Поэтому вместо получения новой ссылки на файловую систему попробуйте создать новый файл DirectoryReader.

person HBP    schedule 15.05.2013
comment
Я верю, что делал это. В консоли я сделал fs.root.createReader() и использовал обратный вызов из функции readEntries(), чтобы просто установить глобальную переменную для значения записей. Это значение имело бы нулевую длину, и поэтому мой алгоритм в любом случае остановился бы на этом. - person No Context; 15.05.2013
comment
Интересно, что при ближайшем рассмотрении вашего кода вы называете readEntries двумя разными способами, один раз с dirEntry, а другой без. Это кажется неправильным. Посмотрите на указанный сайт HMTL5rocks для примера чтения каталогов. Он близок к вашему коду, но немного отличается. - person HBP; 15.05.2013
comment
Это немного смущает, но это было просто ошибкой копировать это. Это был $scope.dirReader.readEntries(), но эта деталь не казалась важной, и я случайно удалил слишком много, когда менял ее. Прошу прощения за то, что заставил вас задуматься о чем-то, что не было реальной проблемой. - person No Context; 15.05.2013
comment
Было бы полезно, если бы вы дали полный контекст. Часто проблема не там, где вы сначала думаете. Также я предполагаю, что вы проверили консоль на наличие сообщений об ошибках. - person HBP; 15.05.2013
comment
Все вызовы dirReader на самом деле являются $scope.dirReader, но я просто назначил их позже, так что это один и тот же объект. Но да, консоль чистая. Когда я вручную получал новый dirReader, происходило то же самое. Он вернет записи, он будет просто пустым. Я думаю, что это просто уродливый API. - person No Context; 15.05.2013
comment
У меня все еще есть проблема с кодом, который у вас сейчас есть, вызов dirEntries не имеет параметра. - person HBP; 15.05.2013