Bonsoir,
J'ai besoin de supprimer ou déplacer des dossiers en C#.
Le problème, c'est qu'il faut prévoir l'éventualité qu'il y ait des fichiers cachés, en lecture seule ou archivés, et là je bloque.
Avec le code donnée par microsoft, j'ai réussi à modifier les attributs des fichiers. Si le fichier est seulement caché ou seulement en lecture seule, cela fonctionne, mais si il est caché ET en lecture seule, cela ne fonctionne pas.
Voici mon 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 foreach (string fichier in tabFichiers) /* Pour chaque fichier */ { // delete/clear hidden attribute //File.SetAttributes(fichier, File.GetAttributes(fichier) & ~FileAttributes.Hidden); // delete/clear archive and read only attributes //File.SetAttributes(fichier, File.GetAttributes(fichier) & ~(FileAttributes.Hidden & FileAttributes.Archive & FileAttributes.ReadOnly)); //Récupération des attributs FileAttributes attributes = File.GetAttributes(fichier); //Si le fichier est caché if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { attributes = RemoveAttribute(attributes, FileAttributes.Hidden); File.SetAttributes(fichier, attributes); } else { File.SetAttributes(fichier, File.GetAttributes(fichier) | FileAttributes.Hidden); } //Si le fichier est en lecture seule if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly); File.SetAttributes(fichier, attributes); } else { File.SetAttributes(fichier, File.GetAttributes(fichier) | FileAttributes.ReadOnly); } //Si le fichier est archivé if ((attributes & FileAttributes.Archive) == FileAttributes.Archive) { attributes = RemoveAttribute(attributes, FileAttributes.Archive); File.SetAttributes(fichier, attributes); } else { File.SetAttributes(fichier, File.GetAttributes(fichier) | FileAttributes.Archive); } //Suppression du fichier File.Delete(fichier); }Le programme plante sur la ligne du foreach et n'arrive pas à accéder au fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove) { return attributes & ~attributesToRemove; }
Si quelqu'un sait comment s'y prendre...
Merci d'avance
Partager