32 votes

Obtenir le nom du fichier après le chargement asynchrone d'un fichier par le lecteur de fichiers

Je charge plusieurs fichiers dans un répertoire afin d'en analyser les données. Cela fonctionne très bien jusqu'à présent, mais j'aimerais savoir quel fichier je consulte. J'ai donc besoin du nom du fichier après son chargement. Quelqu'un peut-il m'aider ?

// récupère tous les fichiers dans le répertoire

function updateData(){
  var dirReader = approot.createReader();

  var fail =failCB('Error - Directory for parsing failed to open'); // logs fail...
  dirReader.readEntries(parseData,fail); 
}

// chargement de chaque fichier

function parseData(entries){
  var i;
  for (i=0; i<entries.length; i++) {
    var reader = new FileReader();
    reader.onloadend = createListItem;
    reader.readAsText(entries[i]);
  }
}

// J'AIMERAIS CONNAÎTRE LE NOM ! !!!

function createListItem(evt){
    // it gives me all the loaded data. But based on which file it was, I would like to handle it!
  console.log(evt.target.result)
    // lets say something like this
    $('#content').find(   file.name   ).append(evt.target.result);
  }
}

44voto

ebidel Points 11312

Créer une fermeture autour du File pour capturer le fichier en cours. Vous pouvez ensuite obtenir le nom du fichier.

Un exemple : http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-reading-files

Fermeture pour capturer les informations du fichier.

function parseData(entries){
  for (var i=0; i<entries.length; i++) {
    reader.onloadend = (function(file) {
      return function(evt) {
        createListItem(evt, file)
      };
    })(entries[i]);
    reader.readAsText(entries[i]);
  }
}

Et la fonction appelée reçoit un argument supplémentaire

function createListItem(evt, file) {
  console.log(evt.target.result)
  console.log(file.name);
}

18voto

Thibault T Points 430

Le code source suivant ajoute un attribut au lecteur de fichiers

    for(i=0; i < files.length; i++)
    {
        var fileReader = new FileReader();
        fileReader.onload = function(file)
        {
              // DO what you need here
              // file name = file.target.fileName
        } // end of reader load
        fileReader.fileName = files[i].name;
        fileReader.readAsBinaryString(files[i]);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X