Lectura del sistema de archivos HTML5 después de la actualización del directorio

Estoy tratando de crear una interfaz dinámica para interactuar con el sistema de archivos HTML5 en Chrome Canary, pero actualmente me encuentro con un obstáculo.

yo suelo

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

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

        dirReader.readEntries();

    }, errorHandler);

para obtenerlos la primera vez, lo cual funciona bien. Pero si creo un archivo nuevo y vuelvo a ejecutar el código, no devuelve nada.

Me imagino que está usando una referencia anterior al sistema de archivos o algo así, así que imagino que necesito reiniciar el sistema de archivos o el lector de directorios (eso es una suposición). ¿Cuál es la mejor manera de lidiar con ese problema?

Editar: Obtener una nueva referencia al sistema de archivos funciona, pero eso me hace vomitar un poco. Una mejor manera de hacerlo sería excelente.

preguntado el 15 de mayo de 13 a las 04:05

1 Respuestas

El excelente sitio web de HTML5rocks para manejo de archivos

Para leer el contenido de un directorio, cree un DirectoryReader y llame a su método readEntries(). No hay garantía de que todas las entradas de un directorio se devolverán en una sola llamada a readEntries(). Eso significa que debe seguir llamando a DirectoryReader.readEntries() hasta que no se devuelvan más resultados.

Lo leí en el sentido de que un DirectoryReader es un objeto único. Una vez que lo hayas leído no obtendrás más datos de él. Entonces, en lugar de obtener una nueva referencia del sistema de archivos, intente crear una nueva DirectoryReader.

contestado el 15 de mayo de 13 a las 04:05

Creo que estaba haciendo eso. En la consola lo hice fs.root.createReader() y usaría la devolución de llamada de la función readEntries() para simplemente establecer una variable global para tener el valor de las entradas. Ese valor tendría una longitud de cero y, por lo tanto, mi algoritmo se habría detenido allí de todos modos. - Sin contexto

Interesante, en una inspección más cercana de su código, llama readEntries dos maneras diferentes, una vez con dirEntry, uno sin. Eso parece incorrecto. Mire el sitio HMTL5rocks al que se hace referencia para ver un ejemplo de lectura de directorios. Está cerca de su código pero sutilmente diferente. - HBP

Eso es un poco vergonzoso, pero fue simplemente un error copiarlo. Fue $scope.dirReader.readEntries(), pero ese detalle no parecía relevante, y accidentalmente eliminé demasiado al cambiarlo. Me disculpo por hacerte pensar en algo que no era un problema real. - Sin contexto

Sería útil si das el contexto completo. A menudo, un problema no está donde primero se piensa que está. También asumo que ha revisado la consola en busca de mensajes de error. - HBP

Todas las llamadas a dirReader son en realidad $scope.dirReader, pero las asigné más tarde, por lo que es el mismo objeto. Pero sí, la consola está limpia. Cuando obtuve manualmente un nuevo dirReader, sucedía lo mismo. Devolvería entradas, simplemente estaría vacío. Creo que es solo una API fea. - Sin contexto

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.