PureBasic

Forums PureBasic
Nous sommes le Mer 18/Sep/2019 14:54

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Mar 19/Mar/2019 23:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 309
Localisation: France
Bonsoir a tous,

Depuis de nombreuses années, je fais le ménage dans les fichiers de langue que je n'utilise pas dans les logiciels que j'utilise.
Cela peut représenter plus d'un millier de fichiers et plusieurs dizaines de Mo d'espace disque.
Quand j'ai commencé a utiliser PB, je me suis créé un utilitaire pour automatiser la recherche, l'affichage et éventuellement l'effacement de ces fichiers.
Voici le code très simplifié qui fonctionne directement dans l'IDE de PB et dont j'ai retiré tout ce qui est log, demande de confirmation et effacement des fichiers.
Tous les programmes listés dans ce code n'ont aucun problème de fonctionnement une fois les fichiers des langues non utilisés effacés.
Ce code utilise une DataSection pour lister les fichiers.
Dans mon application, les datas sont contenus dans un fichier externe lu au démarrage pour nourrir la DataSection.
Afin d'améliorer ce bout de code, n'hésitez a le critiquer (dans le bon sens du terme)
Merci.
Code:
EnableExplicit

OnErrorGoto(?ErrorHandler)

;; https://www.science.co.il/language/Locale-codes.php
;; en en-us 0x0409 1033 English - United States
;; fr fr-fr 0x040C 1036 French  - France

Global PF1$ = "C:\Program Files\"
Global PF2$ = "C:\Program Files (x86)\"
Global ADL$ = "C:\Users\admin\AppData\Local\"
Global ADR$ = "C:\Users\admin\AppData\Roaming\"

DataSection
  ListeApplications:
  Data.s "DesktopCal\language                       !*.xml !eng.xml|fra.xml"
  Data.s "Spotify\locales                           !*.mo  !en.mo|fr.mo|fr-CA.mo"
  Data.s "Spotify\locales                           !*.pak !en-GB.pak|en-US.pak|fr.pak"
 
  Data.s "Molotov\app-3.1.0\locales                 !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Programs\metube\locales                   !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Programs\somafm\locales                   !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Programs\youtube-music-desktop-app\locales!*.pak !en-GB.pak|en-US.pak|fr.pak"
 
  Data.s "CCleaner\Lang                             !*.dll !lang-1033.dll|lang-1036.dll"
  Data.s "Defraggler\Lang                           !*.dll !lang-1033.dll|lang-1036.dll"
  Data.s "Recuva\Lang                               !*.dll !lang-1033.dll|lang-1036.dll"
  Data.s "Speccy\Lang                               !*.dll !lang-1033.dll|lang-1036.dll"
  ;
  Data.s "adslTV\VLC\locale                         !*.*   !en_GB|fr"
  Data.s "VideoLAN\VLC\locale                       !*.*   !en_GB|fr"
  ;
  Data.s "AirLiveDrive\Language                     !*.xaml!strings_en-GB.xaml|strings_en-US.xaml|strings_fr-FR.xaml"
  Data.s "Alt-Tab Terminator\lang                   !*.xml !French.xml"
  Data.s "Bandizip\langs                            !*.ini !English.ini|French.ini"
  Data.s "CherryPlayer\languages                    !*.ini !english.ini|french.ini"
  Data.s "DVBViewer\Language                        !*.lng !English.lng|French.lng"
  Data.s "FreeFileSync\Languages                    !*.lng !english_uk.lng|french.lng"
  Data.s "Honeyview\langs                           !*.ini !English.ini|French.ini"
  Data.s "Icecream PDF Editor\translations          !*.qm  !icepdfeditor_en.qm|icepdfeditor_fr.qm"
  Data.s "Icecream PDF Split and Merge\translations !*.ini !icecreamshell_en.ini|icecreamshell_fr.ini"
  Data.s "Icecream PDF Split and Merge\translations !*.qm  !pdftool_en.qm|pdftool_fr.qm"
  Data.s "JustRadio\Locales                         !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "KC Softwares\SUMo                         !*.spk !SUMo_00000409.SPK|SUMo_0000040C.SPK"
  Data.s "MPC-BE\Lang                               !*.dll !mpcresources.fr.dll"
  Data.s "MPC-HC\Lang                               !*.dll !mpcresources.en_GB.dll|mpcresources.fr.dll"
  Data.s "MyPhoneExplorer\languages                 !*.lng !English.lng|French.lng"
  Data.s "TomTom HOME 2\Translations                !*.*   !en_GB|en_US|fr"
  Data.s "Vistumbler\Languages                      !*.ini !English.ini|French.ini"
  Data.s "Wise\Wise Force Deleter\Languages         !*.ini !English.ini|French.ini"
  Data.s "Wise\Wise JetSearch\Languages             !*.ini !English.ini|French.ini"
  Data.s #Null$
EndDataSection

Procedure searchLang()
  Protected ligne$
  Protected separateur$="!"
  Protected dossier$, fichier$, langue$, modele$
  Protected count, n, taille, tailleTotale, nombreDeFichiers
 
  Restore ListeApplications
 
  Repeat
  Read.s ligne$
    If ligne$ <> #Null$
      count = CountString(ligne$, separateur$)
      If count
        dossier$ = Trim(StringField(ligne$,1,separateur$)) ;: Debug "Dossier: "+dossier$
        modele$  = Trim(StringField(ligne$,2,separateur$)) ;: Debug "Modéle: " +modele$
        langue$  = Trim(StringField(ligne$,3,separateur$)) ;: Debug "Langue: " +langue$ : Debug ""
      Else
        Continue
      EndIf
      NewList folder.s()
      AddElement(folder())
        folder() = PF1$ + dossier$ + "\"
      AddElement(folder())
        folder() = PF2$ + dossier$ + "\"
      AddElement(folder())
        folder() = ADL$ + dossier$ + "\"
      AddElement(folder())
        folder() = ADR$ + dossier$ + "\"
      ForEach folder()
        If ExamineDirectory(0, folder(), modele$)
          Debug UCase(folder()) : Debug ""
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              fichier$ = DirectoryEntryName(0)
              If Not FindString(langue$, fichier$, 1, #PB_String_NoCase)
                taille = FileSize(folder()+fichier$)
                tailletotale + taille
                nombredefichiers + 1
                Debug folder()+fichier$+" ---> "+taille
              EndIf
            EndIf
            If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
              dossier$ = DirectoryEntryName(0)
              Select Left(LCase(dossier$), 12)
                Case ".", ".."
                Default
                  If Not FindString(langue$, dossier$, 1, #PB_String_NoCase)
                    If ExamineDirectory(1, folder()+dossier$, "*.*")
                      While NextDirectoryEntry(1)
                        If DirectoryEntryType(1) = #PB_DirectoryEntry_File
                          fichier$ = DirectoryEntryName(1)
                          taille = FileSize(folder()+dossier$+"\"+fichier$)
                          tailletotale + taille
                          nombredefichiers + 1
                          Debug folder()+dossier$+"\"+fichier$+" ---> "+taille
                        EndIf
                      Wend
                    EndIf
                  EndIf
              EndSelect
            EndIf
          Wend
          Debug ""
          FinishDirectory(0)
        EndIf
      Next
    EndIf
  Until ligne$ = #Null$
  Debug "NOMBRE DE FICHIERS : " + NOMBREDEFICHIERS
  Debug ""
  Debug "TAILLE TOTALE: " + FormatNumber(TAILLETOTALE,3,".",".")
  Debug ""
EndProcedure

searchLang()

ErrorHandler:
End
CAGE

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Mer 20/Mar/2019 9:41 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 904
@cage
Surprenant et intéressant.
Merci du partage


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Mer 20/Mar/2019 10:18 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
C'est pas mal ça merci.

Note : Pour être sûr de ne pas virer le mauvais DLL de chez Piriform (xx1036.dll) on peut les ouvrir avec 7zip.
Ensuite ou ouvre le txt du dossier .rsrc

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Mer 20/Mar/2019 11:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 309
Localisation: France
Bonjour,

Pour être au plus prêt de la réalité au niveau de l'espace disque utilisé, j'utilise la procédure diskSize(size)
Pour Molotov, comme le dossier comporte le numéro de version, j'utilise un artifice.
D'autres logiciels changent de nom de dossier a chaque mise à jour majeure.
J'utilise le même principe que pour Molotov afin de trouver ce nom de dossier.
Code:
EnableExplicit

OnErrorGoto(?ErrorHandler)

Define USERNAME$ = UserName()

;; https://support.microsoft.com/fr-fr/help/140365/default-cluster-size-for-ntfs-fat-and-exfat
;; https://www.science.co.il/language/Locale-codes.php
;; en en-us 0x0409 1033 English - United States
;; fr fr-fr 0x040C 1036 French  - France

Global PF1$ = "C:\Program Files\"
Global PF2$ = "C:\Program Files (x86)\"
Global ADL$ = "C:\Users\"+USERNAME$+"\AppData\Local\"
Global ADR$ = "C:\Users\"+USERNAME$+"\AppData\Roaming\"

Global appmolotov$
Define MOLOTOVPATH$ = ADL$+"Molotov\"
Define NEWFOLDER$, OLDFOLDER$

If ExamineDirectory(0, MOLOTOVPATH$, "app*.*")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      NEWFOLDER$ = DirectoryEntryName(0)
      If NEWFOLDER$ <> OLDFOLDER$
        Select Left(LCase(NEWFOLDER$), 12)
          Case ".", ".."
          Default
            appmolotov$ = NEWFOLDER$ ;: Debug NEWFOLDER$
        EndSelect
      EndIf
      OLDFOLDER$ = NEWFOLDER$
    EndIf
  Wend
  FinishDirectory(0)
Else
  appmolotov$ = "app-3.1.0"
EndIf

DataSection
  ListeApplications:
  Data.s "DesktopCal\language                       !*.xml !eng.xml|fra.xml"
  Data.s "Spotify\locales                           !*.mo  !en.mo|fr.mo|fr-CA.mo"
  Data.s "Spotify\locales                           !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Molotov\app-x.x.x\locales                 !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Programs\metube\locales                   !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Programs\somafm\locales                   !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "Programs\youtube-music-desktop-app\locales!*.pak !en-GB.pak|en-US.pak|fr.pak"
 
  Data.s "CCleaner\Lang                             !*.dll !lang-1033.dll|lang-1036.dll"
  Data.s "Defraggler\Lang                           !*.dll !lang-1033.dll|lang-1036.dll"
  Data.s "Recuva\Lang                               !*.dll !lang-1033.dll|lang-1036.dll"
  Data.s "Speccy\Lang                               !*.dll !lang-1033.dll|lang-1036.dll"
  ;
  Data.s "adslTV\VLC\locale                         !*.*   !en_GB|fr"
  Data.s "VideoLAN\VLC\locale                       !*.*   !en_GB|fr"
  ;
  Data.s "AirLiveDrive\Language                     !*.xaml!strings_en-GB.xaml|strings_en-US.xaml|strings_fr-FR.xaml"
  Data.s "Alt-Tab Terminator\lang                   !*.xml !French.xml"
  Data.s "Bandizip\langs                            !*.ini !English.ini|French.ini"
  Data.s "CherryPlayer\languages                    !*.ini !english.ini|french.ini"
  Data.s "DVBViewer\Language                        !*.lng !English.lng|French.lng"
  Data.s "FreeFileSync\Languages                    !*.lng !english_uk.lng|french.lng"
  Data.s "Honeyview\langs                           !*.ini !English.ini|French.ini"
  Data.s "Icecream PDF Editor\translations          !*.qm  !icepdfeditor_en.qm|icepdfeditor_fr.qm"
  Data.s "Icecream PDF Split and Merge\translations !*.ini !icecreamshell_en.ini|icecreamshell_fr.ini"
  Data.s "Icecream PDF Split and Merge\translations !*.qm  !pdftool_en.qm|pdftool_fr.qm"
  Data.s "JustRadio\Locales                         !*.pak !en-GB.pak|en-US.pak|fr.pak"
  Data.s "KC Softwares\SUMo                         !*.spk !SUMo_00000409.SPK|SUMo_0000040C.SPK"
  Data.s "MPC-BE\Lang                               !*.dll !mpcresources.fr.dll"
  Data.s "MPC-HC\Lang                               !*.dll !mpcresources.en_GB.dll|mpcresources.fr.dll"
  Data.s "MyPhoneExplorer\languages                 !*.lng !English.lng|French.lng"
  Data.s "TomTom HOME 2\Translations                !*.*   !en_GB|en_US|fr"
  Data.s "Vistumbler\Languages                      !*.ini !English.ini|French.ini"
  Data.s "Wise\Wise Force Deleter\Languages         !*.ini !English.ini|French.ini"
  Data.s "Wise\Wise JetSearch\Languages             !*.ini !English.ini|French.ini"
  Data.s #Null$
EndDataSection

Procedure diskSize(size)
;; https://support.microsoft.com/fr-fr/help/140365/default-cluster-size-for-ntfs-fat-and-exfat
  Protected cluster.f
  Protected clustersize = 4096
  If size = 0 : size = clustersize : EndIf
  cluster = size / clustersize                ;: Debug cluster
  cluster = Int(Round(cluster, #PB_Round_Up)) ;: Debug cluster
  size = clustersize * cluster
  ProcedureReturn size
EndProcedure

Procedure searchLang()
  Protected ligne$
  Protected separateur$="!"
  Protected dossier$, fichier$, langue$, modele$
  Protected count, taille, tailleTotale, nombreDeFichiers
 
  Restore ListeApplications
 
  Repeat
  Read.s ligne$
    If ligne$ <> #Null$
      count = CountString(ligne$, separateur$)
      If count
        dossier$ = Trim(StringField(ligne$,1,separateur$)) : Debug "Dossier: "+dossier$
        modele$  = Trim(StringField(ligne$,2,separateur$)) ;: Debug "Modéle: " +modele$
        langue$  = Trim(StringField(ligne$,3,separateur$)) ;: Debug "Langue: " +langue$ : Debug ""
        If LCase(Left(dossier$, 8)) = "molotov\"
          dossier$ = ReplaceString(dossier$, "app-x.x.x", appmolotov$, #PB_String_NoCase)
          Debug dossier$
        EndIf
      Else
        Continue
      EndIf
      NewList folder.s()
      AddElement(folder())
        folder() = PF1$ + dossier$ + "\"
      AddElement(folder())
        folder() = PF2$ + dossier$ + "\"
      AddElement(folder())
        folder() = ADL$ + dossier$ + "\"
      AddElement(folder())
        folder() = ADR$ + dossier$ + "\"
      ForEach folder()
        If ExamineDirectory(0, folder(), modele$)
          Debug UCase(folder()) : Debug ""
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              fichier$ = DirectoryEntryName(0)
              If Not FindString(langue$, fichier$, 1, #PB_String_NoCase)
                taille = FileSize(folder()+fichier$)
                taille = diskSize(taille) ; <--- AJOUT
                tailletotale + taille
                nombredefichiers + 1
                Debug folder()+fichier$+" ---> "+FormatNumber(taille,0,",",".")+" octets"
              EndIf
            EndIf
            If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
              dossier$ = DirectoryEntryName(0)
              Select Left(LCase(dossier$), 12)
                Case ".", ".."
                Default
                  If Not FindString(langue$, dossier$, 1, #PB_String_NoCase)
                    If ExamineDirectory(1, folder()+dossier$, "*.*")
                      While NextDirectoryEntry(1)
                        If DirectoryEntryType(1) = #PB_DirectoryEntry_File
                          fichier$ = DirectoryEntryName(1)
                          taille = FileSize(folder()+dossier$+"\"+fichier$)
                          taille = diskSize(taille) ; <--- AJOUT
                          tailletotale + taille
                          nombredefichiers + 1
                          Debug folder()+dossier$+"\"+fichier$+" ---> "+FormatNumber(taille,0,",",".")+" octets"
                        EndIf
                      Wend
                    EndIf
                  EndIf
              EndSelect
            EndIf
          Wend
          Debug ""
          FinishDirectory(0)
        EndIf
      Next
    EndIf
  Until ligne$ = #Null$
  TAILLETOTALE = diskSize(TAILLETOTALE) ; <--- AJOUT
  Debug "NOMBRE DE FICHIERS : " + NOMBREDEFICHIERS
  Debug ""
  Debug "TAILLE TOTALE: " + FormatNumber(TAILLETOTALE,0,",",".")+" octets"+" soit "+FormatNumber(TAILLETOTALE/1024,0,",",".")+ " Ko"
  Debug ""
EndProcedure

searchLang()

ErrorHandler:
End

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Dernière édition par cage le Jeu 21/Mar/2019 14:17, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Mer 20/Mar/2019 11:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 309
Localisation: France
@Ar-S
Citation:
Note : Pour être sûr de ne pas virer le mauvais DLL de chez Piriform (xx1036.dll) on peut les ouvrir avec 7zip.
Ensuite ou ouvre le txt du dossier .rsrc
Je connaissais l'astuce, mais l'ouverture de string.txt du dossier .rsrc ne me donne que des caractères bizarres.
J'utilise strings.exe de chez Microsoft (live.sysinternals.com) pour voir la langue utilisée dans la dll

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Mer 20/Mar/2019 13:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Chez moi aucun soucis en l'ouvrant avec NP++ ni même avec le bloc-note. Étrange.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Trouver et effacer les fichiers de langue inutiles
MessagePosté: Dim 24/Mar/2019 17:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 309
Localisation: France
Bonjour a tous,

Une version plus aboutie est disponible sur cette page
Image

Image
Seules les sources sont disponibles, les exécutables viendront une fois le projet abouti.
Quelques commandes:
La touche Escape minimise l'application
CTRL+S sélectionne toutes les cases a cocher de la liste des programmes
CTRL+D désélectionne toutes les cases...
Voir aussi le menu Programmes
F1 affiche le message About
Un double clic sur une ligne de le liste des programmes ouvre le dossier dudit programme s'il existe.
Le bouton Afficher les programmes affiche la liste
Le bouton Rechercher les fichiers locales lance la recherche des locales des programmes cochés.
Une fois la recherche effectuée, 2 boutons supplémentaires s'affichent.
Le bouton Enregistrer la liste des locales permet d'enregistrer le résultat de la recherche.
Le bouton Effacer les fichiers locales permet d'effacer les fichiers trouvés.
Par précaution, la constante #confirm est positionnée a #False au début du code.
On peut donc faire tous les tests que l'on souhaite sans risque.
Pour pouvoir vraiment effacer les fichiers, il faudra indiquer #confirm=#True
Le menu Utilisateur permet de sélectionner l'utilisateur pour lequel effectuer une recherche de programme.
Pour pouvoir réellement effacer les fichiers, l'application doit donc être lancée en admin.
Dans ce cas, l'utilisateur n'est plus celui qui a lancé le programme, mais "admin".

Je suis conscient que l'application n'est pas vraiment aboutie, je compte donc sur vos remontées.
Si vous pouviez aussi compléter la liste des programmes avec les vôtres qui n'y seraient pas déjà, ce serait cool.

Si vous êtes arrivez là, merci a vous de m'avoir lu.

CAGE

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Shade et 6 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye