IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Renommage de fichiers impossible


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut [C#] Renommage de fichiers impossible
    Bonjour,

    Je code sous VS2005 avec le framework 2.0.

    Je parcours recussivement un repertoire pour connaitre la liste des fichiers jpeg qui le compose.

    Une fois cette liste obtenue, je récupère une donnée EXIF dans chaque fichier JPEG (date et heure à laquelle a été prise la photo) et je veux renommer le fichier.

    Le renommage ne marche pas, car il y a soit disant un process qui vérouille le fichier (IOException sur la ligne en rouge dans le code) ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
            /** renome les fichiers respectant la searchPattern (*.jpg par exemple)
                 selon le model "[yyy-MM-dd hh-mm-ss] filename.jpg" */
            public static void renameImages(String path, String searchPattern) {
                String currentExifDate = null;
                String currentImageName = null;
                String newImageName = null;
                String originalImageName = null;
                String currentImagePath = null;
                int nbImgRenamed = 0;
                int nbImgIgnored = 0;
    
                List<FileSystemInfo> fileSystemInfos = findFilesRecursively(path, searchPattern);
    
                foreach (FileSystemInfo fileSystemInfo in fileSystemInfos) {
                    try {
                        currentImageName = fileSystemInfo.Name;
                        currentImagePath = new FileInfo(fileSystemInfo.FullName).Directory.FullName;
                        currentExifDate = getExifDate(fileSystemInfo.FullName);
                        if (currentExifDate != null) {
                            currentExifDate = "[" + currentExifDate.Replace(':', '-') + "] ";
                            newImageName = currentExifDate + currentImageName;
                            File.Move(fileSystemInfo.FullName, currentImagePath + "\\" + newImageName);
                            nbImgRenamed++;
                        } else {
                            nbImgIgnored++;
                        }
                    } catch (Exception exception) {
                        Console.WriteLine("ERROR : " + exception.Message);
                    }
                }
            }
    
            public static List<FileSystemInfo> findFilesRecursively(String path, String searchPattern) {
                List<FileSystemInfo> retour = new List<FileSystemInfo>();
                
                try {
                    DirectoryInfo directoryInfo = new DirectoryInfo(path);
                    try {
                        FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos(searchPattern);
                        foreach (FileSystemInfo fileSystemInfo in fileSystemInfos) {
                            retour.Add(fileSystemInfo);
                        }
                    } catch (Exception exception) {
                        Console.WriteLine(exception.Message, exception);
                    }
    
                    try {
                        DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
                        foreach (DirectoryInfo currentDirectoryInfo in directoryInfos) {
                            retour.AddRange(findFilesRecursively(currentDirectoryInfo.FullName, searchPattern));
                        }
                    } catch (Exception exception) {
                        Console.WriteLine(exception.Message, exception);
                    }
                } catch (Exception exception) {
                    Console.WriteLine(exception.Message, exception);
                }
    
                return retour;
            }
    
            /** get Exif date for JPEG/TIFF image in format : yyyy:MM:dd hh:mm:ss */
            public static String getExifDate(String imageFilename){
                ASCIIEncoding asciiEncoder = new ASCIIEncoding();
                String exifDate = null;
                try {
                    Image img = new Bitmap(@imageFilename);
                    exifDate = asciiEncoder.GetString(img.GetPropertyItem(0x9003).Value);
                    if (exifDate.EndsWith("\0")) {
                        exifDate = exifDate.Substring(0, exifDate.LastIndexOf("\0"));
                    }
                } catch (Exception exception) {
                    Console.WriteLine(exception.Message, exception);
                }
                return exifDate;
            }

  2. #2
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Normal.
    Dans ton foreach tu OUVRES un stream sur le fichier.
    Donc quand tu veux le RENOMMER avec File, bah il t'envoies tout naturellement bouler, apske ton fichier est ouvert et qu'on ne modifie pas le nom d'un fichier ouvert.
    Fait ton renommage APRES avoir fermé ton stream.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    Ou est-ce que j'ouvre un stream sur le fichier ? parce que c'est pas intentionnel...

    tu peux être un petit peu plus explicite ?

    Serait le new Bitmap qui lock le fichier ? ou le getPropertyItem ? ou l'usage de la structure FileSystemInfo ou FileInfo ?

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ouaip, c'est ton Bitmap.
    Faut faire un Dispose() dessus avant de le bouger

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    ça marche. merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Partage des fichier impossibles
    Par maminova dans le forum Administration
    Réponses: 3
    Dernier message: 16/11/2005, 10h28
  2. Fichier impossible a supprimer
    Par remi77 dans le forum Windows XP
    Réponses: 9
    Dernier message: 04/10/2005, 22h16
  3. Copie de fichier impossible en Java ?
    Par Fildz dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 21/09/2005, 13h23
  4. [batch] renommage de fichiers dans des rep enfants
    Par khayyam90 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 25/08/2005, 09h03
  5. suppression de fichier impossible (windows xp)
    Par annecyrond dans le forum Windows XP
    Réponses: 8
    Dernier message: 10/03/2005, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo