mardi 19 mars 2013

Copie des fichiers

L'étape suivante sera de copier (ou déplacer) les fichiers vers leur destination.

Java

Code

Je vais utiliser l'API common-IO d'apache qui permet de gérer simplement la copie de fichier. Cette API créé les dossiers si elle n'existe pas et gère correctement les exceptions.

for (String file : listImage) {
 File targetFile = fs.getImageNameFromExif(file);
 if (targetFile != null) {
  try {
   FileUtils.copyFile(new File(file), targetFile);
  } catch (IOException e) {
   fs.error.append(e.getMessage());
  }   
 }
}

Résultat

C'est long ! 12 minutes de copie. Il y a 10 Go de données. Je testerais par la suite combien de temps un simple copier / coller prendrais. 

PHP

Code

Pas besoin d'aller chercher loin. La fonction copy suffira.

//On parcours les images.
foreach ($fs->listImages as $file) {

  //On récupère le chemin cible et le nom de fichier
  $target = $fs->getImageNameFromExif($file);
  
  //On créé le dossier cible
  $dir = $targetBase."/".$target["dir"];
  if (!file_exists($dir)) {
    mkdir($dir, 0777, true);
  } 
  
  //On copy le fichier à proprement parlé
  $targetPath = $dir."/".$target["src"];
  if (!copy($file, $targetPath)) {
    array_push($err, "cannot copy ".$file." to ".$targetPath);
  } 
}


Résultat

Attention, avant d’exécuter  penser à bien supprimer les fichiers copiés par la précédente méthode en java, sans quoi le test serait différent.

C'est long aussi ! 11 minutes, c'est un peu mieux mais au final comme la récupération des données EXIF prenait 1 minutes de plus on arrive à la même performance.

C#

Code

Je vais utiliser la class FileSystem qui a l'avantage de créer les répertoires manquants.

foreach (string file in p.files)
{
    string target = p.getImageNameFromExif(file);
    FileSystem.CopyFile(file, target, true);
}

Résultat

C'est un peu mieux, on est à 8 minutes environ. Ca reste long mais c'est tout de même 1/3 de moins que le java.

Bilan

Au final le C# est le plus performant. Malgré un moins bon temps pour la lecture des données EXIF les performances liées aux accès file system ce langage est en tête même si les différences ne sont pas flagrante avec peut être le PHP en peu en retrait.

Pour info un copier / coller de l'ensemble de ces images a pris un peu plus de 7 minutes.

Aucun commentaire:

Enregistrer un commentaire