
Envoyé par
Vincent_04
Sous XP. Bon si tu dis que ça marche, je retente le coup.
Bon, je croyais avoir testé, mais apparemment je croyais mal 
Ca peut pas marcher, parce qu'il y a un bug dans IniFile qui fait qu'il ne gère pas les noms de section qui contiennent un point, comme ".ShellClassInfo"
Par contre, après correction, ça fonctionne bien sous XP...

Envoyé par
Vincent_04
Et comme je suis armoire en C++...
Pas grave, c'est du C# 

Envoyé par
Vincent_04
Je viens de voir que tu es l'auteur de IniFile. Désolé pour l'histoire du bug... Il y a un truc que je ne dois pas faire correctement:
myDesktopIni = New IniFile("INIfileFullPath",True)
Je reçois le message d'exception : "Un élément avec la même clé a déjà été ajouté".
A priori c'est lié au bug mentionné plus haut. Si je comprends bien ce qui se passe, la première exécution ne doit pas causer d'erreur, mais la suivante oui...
Ce sera corrigé dans la prochaine version de la lib Dvp.NET. En attendant, si tu veux corriger toi même, il faut modifier une expression régulière dans IniFile.cs :
Ancien code :
private static readonly Regex _regexSection = new Regex(@"\s*\[\s*([\w\s]+)\]", RegexOptions.Compiled);
Nouveau code :
private static readonly Regex _regexSection = new Regex(@"\s*\[\s*([\.\w\s]+)\]", RegexOptions.Compiled);
Le code VB avec lequel j'ai testé :
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
| Sub SetFolderIcon(ByVal folderPath As String, ByVal iconPath As String)
Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
Dim attr As FileAttributes
Dim ini As IniFile
If File.Exists(iniFilePath) Then
attr = File.GetAttributes(iniFilePath)
File.SetAttributes(iniFilePath, attr And Not (FileAttributes.System Or FileAttributes.Hidden))
ini = New IniFile(iniFilePath)
Else
attr = FileAttributes.System Or FileAttributes.Hidden
ini = New IniFile()
End If
ini(".ShellClassInfo", "IconFile") = iconPath
ini(".ShellClassInfo", "IconIndex") = "0"
ini.FileName = iniFilePath
ini.Save()
File.SetAttributes(iniFilePath, attr)
End Sub
Sub RemoveFolderIcon(ByVal folderPath As String)
Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
If File.Exists(iniFilePath) Then
Dim attr As FileAttributes = File.GetAttributes(iniFilePath)
File.SetAttributes(iniFilePath, attr And Not (FileAttributes.System Or FileAttributes.Hidden))
Dim ini As IniFile = New IniFile(iniFilePath)
If ini.Sections.ContainsKey(".ShellClassInfo") Then
ini.Sections(".ShellClassInfo").Remove("IconFile")
ini.Sections(".ShellClassInfo").Remove("IconIndex")
ini.FileName = iniFilePath
ini.Save()
End If
File.SetAttributes(iniFilePath, attr)
End If
End Sub |
Remarque que j'enlève les attributs "système" et "caché" avant de modifier le fichier, et que je les remets après : sinon j'ai une erreur "accès refusé", du moins sous Seven
Partager