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; }
Partager