Voici la nouvelle version avec le support des zip et quelques bugs en moins ^^.
Code : Tout sélectionner
;- Déclaration des constantes pour les fenêtres.
Enumeration
#Window_0
#Window_1
EndEnumeration
;- Déclaration des constantes pour les gadgets.
Enumeration
#ProgressBar_0
#Text_0
#Text_1
#Listview_0
#Button_1
#Button_2
#Intro
#Fichier
#Demande
#FDelete
#Clear
#Rien
EndEnumeration
Procedure FindFile(file$) ; Cherche un fichier dans la liste des fichiers à ignorer.
; Boucle de 0 à 99 (taille maximale du tableau).
For i = 0 To 99
; Retourne le nom de fichier contenu dans le tableau à l'adresse i.
Lfile$ = ToIgnore(i)
; Si ce fichier est le fichier en cours.
If Lfile$ = file$
; la prococédure retourne vrai (true).
ProcedureReturn #TRUE
; Et quitte la boucle.
Break
EndIf
Next i
EndProcedure
Procedure WriteLog(text$, mode) ; Écrit le fichier log.
; Si le mode est 2
If mode = 2
; Ajout de l'information dans la liste.
AddGadgetItem(#Listview_0, -1, text$)
EndIf
; S'il arrive à ouvrir/créer le fichier.
If OpenFile(0, "results.log")
; Place le pointeur en fin de fichier.
FileSeek(Lof())
; Et écrit le texte demandé.
WriteStringN(text$)
; Puis ferme le fichier
CloseFile(0)
EndIf
EndProcedure
Procedure ExamineFile(file$, mode) ; Scanne le fichier à la recherche de mots 'interdits'
; S'il arrive à ouvrir le fichier en lecture.
If ReadFile(2, file$)
; Mise en place de variables.
delay = 1
vide = 0
notclean = 0
fcrack.l = 0
fwarez.l = 0
fgamez.l = 0
fp2p.l = 0
fsexe.l = 0
; Cherche l'extension du fichier; si elle est différente de zip.
If GetExtensionPart(file$) <> "zip"
; Boucle de lecture.
Repeat
; Lit la ligne en cours.
ligne$ = ReadString()
; La met en miniscules.
ligne$ = LCase(ligne$)
; S'il trouve le mot 'crack'.
If FindString(ligne$, "crack", 0)
; Incrémente la variable globale crack.
crack = crack + 1
; Incrémente la variable fcrack.
fcrack = fcrack + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'warez'.
If FindString(ligne$, "warez", 0)
; Incrémente la variable globale warez.
warez = warez + 1
; Incrémente la variable fwarez.
fwarez = fwarez + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'gamez'.
If FindString(ligne$, "gamez", 0)
; Incrémente la variable globale gamez.
gamez = gamez + 1
; Incrémente la variable fgamez.
fgamez = fgamez + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'p2p'.
If FindString(ligne$, "p2p", 0)
; Incrémente la variable globale p2p.
p2p = p2p + 1
; Incrémente la variable fp2p.
fp2p = fp2p + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'sexe'.
If FindString(ligne$, "sexe", 0)
; Incrémente la variable globale sexe.
sexe = sexe + 1
; Incrémente la variable fsexe.
fsexe = fsexe + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; Supprime tous les espaces au début et à la fin de la chaîne, si la chaîne devient nulle.
If Trim(ligne$) = ""
; Incrémente la variable vide.
vide = vide + 1
EndIf
; Si delay égal 1
If delay = 1
; Pause de 1 milliseconde.
Delay(1)
; Mise à zéro de delay.
delay = 0
EndIf
; Fin de la boucle : avoir atteint la fin du fichier ou le nombre de lignes vides (10000).
Until Eof(2) Or vide = 10000
; Si notclean égale 1, le fichier n'est pas propre, il contient des mots 'interdits'.
If notclean = 1
; Si le mode n'est pas 3 (archive).
If mode <> 3
; Enregistrement de ce fichier dans la liste.
AddElement(Infected())
; Met son nom.
Infected()\file = GetFilePart(file$)
; Met son chemin.
Infected()\directory = GetPathPart(file$)
; Met le nombre de mots interdits trouvés (non utilsé).
Infected()\lfcrack = fcrack
Infected()\lfwarez = fwarez
Infected()\lfgamez = fgamez
Infected()\lfp2p = fp2p
Infected()\lfsexe = fsexe
; Incrémente la variable globale Tocheck.
Tocheck = Tocheck + 1
EndIf
; La procédure renvoie 2.
ProcedureReturn 2
Else
; La procédure renvoie 1.
ProcedureReturn 1
EndIf
; Ferme le fichier.
CloseFile(2)
; Si c'est une archive zip.
Else
; Enregistrement de cette archive dans la liste.
AddElement(Archives())
; Met son nom.
Archives()\file = GetFilePart(file$)
; Met son chemin.
Archives()\directory = GetPathPart(file$)
; Incrémente la variable globale ToUnzip.
ToUnzip = ToUnzip + 1
; La procédure renvoie 3.
ProcedureReturn 3
EndIf
; S'il ne peut pas lire le fichier.
Else
; En informe l'utilisateur.
WriteLog("Impossible de lire "+NextD$+DEN$, 2)
EndIf
EndProcedure
Procedure ClearFile(file$) ; Nettoie le fichier.
; Renome le fichier en fichier *.bak.
If RenameFile(file$, file$+".bak")
; Ouvre le fichier renommé et créé un fichier ayant le nom du précédent.
If ReadFile(2, file$+".bak") And CreateFile(3, file$)
; Mise en place de variables.
vide = 0
delay = 1
; Boucle de lecture, remplacement, écriture.
Repeat
; Utilise le fichier deux (le renommé).
UseFile(2)
; Lit la ligne en cours.
ligne$ = ReadString()
; Remplace tous les mots interdits par 'rien'
ligne$ = ReplaceString(ligne$, "crack", "")
ligne$ = ReplaceString(ligne$, "warez", "")
ligne$ = ReplaceString(ligne$, "gamez", "")
ligne$ = ReplaceString(ligne$, "p2p", "")
ligne$ = ReplaceString(ligne$, "sexe", "")
; Change de fichier et prend le trois (le nouveau créé)
UseFile(3)
; Et écris la chaîne 'pure'.
WriteStringN(ligne$)
; Supprime tous les espaces au début et à la fin de la chaîne, si la chaîne devient nulle.
If Trim(ligne$) = ""
; Incrémente la variable vide.
vide = vide + 1
EndIf
; Si delay (= 1)
If delay
; Pause de 1 milliseconde.
Delay(1)
; Mise à zéro de delay.
delay = 0
EndIf
; Fin de la boucle : avoir atteint la fin du fichier ou le nombre de lignes vides (10000).
Until Eof(2) Or vide = 10000
; Ferme les deux fichiers.
CloseFile(2)
CloseFile(3)
; Supprime le fichier *.bak.
DeleteFile(file$+".bak")
; Informe que le nettoyage a réussi.
WriteLog("Fichier "+file$+" nettoyé avec succès !", 2)
; S'il ne peut pas créer un lire un fichier, informe.
Else
MessageRequester("Erreur", "Impossible de nettoyer le fichier !", #MB_ICONERROR)
EndIf
; S'il ne peut pas renommer, informe.
Else
MessageRequester("Erreur", "Impossible de nettoyer le fichier !", #MB_ICONERROR)
EndIf
EndProcedure
Procedure ExamineFDirectory(nbdirectory, directory$, type) ; Examine les répertoires.
; S'il l'examen a réussi.
If ExamineDirectory(nbdirectory, directory$, "*.*")
; Met la variable BadFiles à un.
BadFiles = 1
; Cherche la prochaine entrée.
NDE = NextDirectoryEntry()
; Tant qu'elle n'est pas nulle (inexistante).
While NDE <> 0
; Si elle vaut un, c'est un fichier.
If NDE = 1
; Cherche le nom du fichier.
DEN$ = DirectoryEntryName()
; Cherche si le fichier est dans la liste des fichiers à ignorer.
If FindFile(DEN$)
; Si oui, incrémente la variable globale ignored.
ignored = ignored+1
Else
; Sinon, ajoute le fichier qui va être scanné dans la liste.
AddGadgetItem(#Listview_0, -1, directory$+DEN$)
; Et l'affiche sous la barre de progression.
SetGadgetText(#Text_1, directory$+DEN$)
; Si BadFiles n'est pas égale à 2.
If BadFiles <> 2
; Examine le fichier en lui trasnmettant le type.
BadFiles = ExamineFile(directory$+DEN$, type)
Else
; Examine le fichier en lui trasnmettant le type.
ExamineFile(directory$+DEN$, type)
EndIf
EndIf
; Si l'entrée vaut deux, c'est un répertoire.
ElseIf NDE = 2
; Cherche le nom du répertoire.
DEN$ = DirectoryEntryName()
; S'il ne vaut pas les points de DOS/UNIX.
If DEN$ <> "." And DEN$ <> ".."
; Si le répertoire ne termine pas par un contre slash.
If Right(DEN$, 1) <> "\"
; Ajout de ce dernier.
DEN$ = DEN$ + "\"
EndIf
; Ajoute le dossier qui va être examiné dans la liste.
AddGadgetItem(#Listview_0, -1, directory$+DEN$)
; Et l'affiche sous la barre de progression.
SetGadgetText(#Text_1, directory$+DEN$)
; Si type n'est pas égal à 3.
If type <> 3
; examine ce répertoire (en incrementant la variable des répertoires, afin de pouvoir retourner au précédent)
ExamineFDirectory(nbdirectory+1, directory$+DEN$, 2)
; Si type égal 3
Else
; examine ce répertoire (en incrementant la variable des répertoires, afin de pouvoir retourner au précédent)
ExamineFDirectory(nbdirectory+1, directory$+DEN$, 3)
EndIf
EndIf
EndIf
; Utilise le répertoire précédent.
UseDirectory(nbdirectory)
; Cherche l'entrée suivante.
NDE = NextDirectoryEntry()
; Attend une milliseconde.
Delay(1)
Wend
; Si le type de répertoire est 1 ou 3 (répertoire (et archive) et non sous-répertoire).
If type = 1 Or type = 3
; Si le type est 1.
If type = 1
; Informe du succès de l'opération.
WriteLog("Répertoire examiné avec succés", 2)
; S'il est égale à 3.
ElseIf type = 3
; Informe du succès de l'opération.
WriteLog("Archive examinée avec succés", 2)
EndIf
If crack = 0 And warez = 0 And gamez = 0 And p2p = 0 And sexe = 0
; Si rien d'illégal n'a été trouvé, informe.
WriteLog("Rien d'illégal n'a été trouvé !", 2)
Else
; Sinon, informe de ce qui a été trouvé.
WriteLog("crack = "+Str(crack), 2)
WriteLog("warez = "+Str(warez), 2)
WriteLog("gamez = "+Str(gamez), 2)
WriteLog("p2p = "+Str(p2p), 2)
WriteLog("sexe = "+Str(sexe), 2)
EndIf
; Si le nombre de fichiers ignorés est différent de zéro.
If ignored <> 0
; Informe du nombre de fichiers ignorés.
WriteLog(Str(ignored)+" fichier(s) ignoré(s) !", 2)
EndIf
EndIf
; La procédure retourne BadFiles (0, 1, ou 2).
ProcedureReturn BadFiles
EndIf
EndProcedure
Procedure Open_Window_1() ; Créé la fenêtre de demande d'execution pour les fichiers 'sensibles'.
If OpenWindow(#Window_1, 235, 104, 230, 109, #PB_Window_TitleBar | #PB_Window_WindowCentered, "Que faire ?")
If CreateGadgetList(WindowID())
TextGadget(#Intro, 10, 10, 210, 20, "Des élements illégaux ont été trouvés dans :")
TextGadget(#Fichier, 10, 30, 210, 20, "")
TextGadget(#Demande, 10, 60, 230, 20, "Que désirez vous faire ?")
ButtonGadget(#FDelete, 10, 80, 60, 20, "Supprimer")
ButtonGadget(#Clear, 80, 80, 60, 20, "Nettoyer")
ButtonGadget(#Rien, 160, 80, 60, 20, "Rien", #PB_Button_Default)
EndIf
EndIf
EndProcedure
Procedure main() ; le coeur du programme.
; Désactive le bouton vérifier.
DisableGadget(#Button_1, 1)
; Ouvre la liste de fichier à ignorer.
If ReadFile(0, "ignore.list")
; L'affiche.
SetGadgetText(#Text_0, "Lecture de la liste des fichiers à ignorer")
; Et l'ajoute à la liste.
AddGadgetItem(#Listview_0, -1, "Lecture de la liste des fichiers à ignorer")
; Boucle de lecture.
Repeat
; Lit la ligne en cours.
FToIgnore$ = ReadString()
; Et l'ajoute à la liste des fichiers à ignorer.
ToIgnore(LIgnore) = FToIgnore$
; Incrémente la variable globale LIgnore
LIgnore = LIgnore + 1
; Ce, jusqu'à la prochaine ligne vide.
Until FToIgnore$ = ""
; Fermeture du fichier.
CloseFile(0)
; Avancement de la barre de progression.
SetGadgetState(#ProgressBar_0, 1)
EndIf
; Lit de le fichier contenant les répertoires.
If ReadFile(1, "directories.conf")
; Et commence la vérification.
SetGadgetText(#Text_0, "Vérification en cours...")
; Lit la ligne en cours.
NextD$ = ReadString()
; Met la variable i en place.
i = 2
; Pendant qu'il y aura des répertoire à lire.
While NextD$
Debug i
; Si le répertoire ne commence pas par # (répertoire).
If Left(NextD$, 1) <> "#"
; Si le répertoire ne termine pas par un contre slash.
If Right(NextD$, 1) <> "\"
; Ajout de ce dernier.
NextD$ = NextD$ + "\"
EndIf
; Informe du répertoire en cours d'examin.
WriteLog(NextD$, 2)
; Examine le répertoire.
ExamineFDirectory(3, NextD$, 1)
; Et avance.
SetGadgetState(#ProgressBar_0, i)
; Incrémente i
i = i + 1
EndIf
; Remise à zéro de varaibles globales.
crack = 0
warez = 0
gamez = 0
p2p = 0
sexe = 0
ignored = 0
; Change de fichier.
UseFile(1)
; Et lit le répertoire suivant.
NextD$ = ReadString()
; Pause de 1 milliseconde.
Delay(1)
Wend
; Si la variable globale ToUnzip est supérieure à zéro.
If ToUnzip > 0
; Boucle de 1 à ToUnzip.
For k = 1 To ToUnzip
; Label Debut, qui permet de reprendre la boucle.
Debut :
; Affiche l'opération en cours.
SetGadgetText(#Text_0, "Vérification des archives *.zip...")
WriteLog("Vérification des archives *.zip...", 2)
; Remet la liste des archives au début.
ResetList(Archives())
; Prend l'entrée suivante dans la liste.
NextElement(Archives())
; Tente d'ouvrir l'archive.
Ouvert = ZipOpen(Archives()\directory+Archives()\file, #Zip_DefaultOptions)
; Et l'affiche.
AddGadgetItem(#Listview_0, -1, Archives()\directory+Archives()\file)
; Si l'archive est ouverte.
If Ouvert = #ZIP_OK
; Fait avancer la barre de progression.
SetGadgetState(#ProgressBar_0, nbdirectories-1)
; Cherche le nombre de fichiers.
NbFiles = ZipGetFileCount()
; Si ce nombre est nul.
If NbFiles = 0
; Informe.
WriteLog("L'archive est vide !", 2)
; Supprime l'archive de la liste.
DeleteElement(Archives())
; Et passe à la suivante.
Goto Debut
EndIf
; Créé le répertoire temporaire.
CreateDirectory("temp\")
; Cherche le premier fichier (Archive First File).
AFFile$ = ZipFindFirstFile()
; Le séléctionne.
ZipSelectFile(1)
; Et l'extrait dans le dossier temporaire.
Extract = ZipExtractFile("temp\", 1)
; Boucle d'extraction.
For i = 2 To NbFiles
; Séléctionne le fichier précédent.
ZipSelectFile(i-1)
; Cherche le fichier suivant.
AFile$ = ZipFindNextFile()
; Le séléctionne.
ZipSelectFile(i)
; Et l'extrait dans le dossier temporaire.
Extract = ZipExtractFile("temp\", i)
; Attend une milliseconde.
Delay(1)
Next i
; Examine les fichiers du répertoire temporaire.
Result = ExamineFDirectory(3, "temp\", 3)
; Si result vaut 2, des fichiers illégaux ont été trouvés.
If Result = 2
; Ajoute l'archive dans la liste des fichiers 'sensibles'.
AddElement(Infected())
; Met son nom.
Infected()\file = Archives()\file
; Met son répertoire.
Infected()\directory = Archives()\directory
; Incrémente la variable globale Tocheck.
Tocheck = Tocheck + 1
EndIf
; Supprime le répertoire temporaire.
DeleteDirectory("temp\", "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)
; Si l'ouverture a échouée.
Else
; L'affiche.
WriteLog("Impossible d'ouvrir l'archive !", 2)
EndIf
; Supprime l'archive de la liste.
DeleteElement(Archives())
; Attend une milliseconde.
Delay(1)
Next k
EndIf
; Si la variable globale Tocheck est supérieure à zéro.
If Tocheck > 0
; Avance
SetGadgetState(#ProgressBar_0, nbdirectories)
; Boucle de 1 à Tocheck.
For k = 1 To Tocheck
; Affiche l'opération en cours.
SetGadgetText(#Text_0, "Nettoyage et suppression des fichiers...")
AddGadgetItem(#Listview_0, -1, "Nettoyage et suppression des fichiers...")
; Supprime le texte des fichiers.
SetGadgetText(#Text_1, "")
; Remet la liste des fichier 'sensibles' au début.
ResetList(Infected())
; Ouvre la fenêtre 'd'execution'
Open_Window_1()
; Prend l'entrée suivante dans la liste.
NextElement(Infected())
; Et l'affiche dans la fenêtre.
SetGadgetText(#Fichier, Infected()\file)
; Mise à zéro de suite.
Suite = 0
; Boucle pour la fenêtre.
Repeat
; Attend un évenement.
Event = WaitWindowEvent()
; S'il vient d'un gagdet.
If Event = #PB_EventGadget
; Cherche l'ID du gadget.
GadgetID = EventGadgetID()
; Si le gadget est le bouton 'supprimer'.
If GadgetID = #FDelete
; Suppression du fichier sur le disque.
DeleteFile(Infected()\directory+Infected()\file)
; Information.
WriteLog("Fichier "+file$+" supprimé avec succès !", 2)
; Mise à 1 de suite.
Suite = 1
; Si c'est le bouton 'nettoyer'.
ElseIf GadgetID = #Clear
; Nettoie le fichier.
ClearFile(Infected()\directory+Infected()\file)
; Mise à 1 de suite.
Suite = 1
; Si c'est le bouton 'rien'.
ElseIf GadgetID = #Rien
; Mise à 1 de suite.
Suite = 1
EndIf
EndIf
; Fin de la boucle si Suite égale 1
Until Suite = 1
; Supprime le fichier en cours de la liste.
DeleteElement(Infected())
Next k
; Mise à zéro de Tocheck.
Tocheck = 0
EndIf
; Réactive le gadget.
DisableGadget(#Button_1, 0)
; Enlève le texte des zone de texte.
SetGadgetText(#Text_0, "")
SetGadgetText(#Text_1, "")
; Remet la barre de progression à zéro.
SetGadgetState(#ProgressBar_0, 0)
; Sinon, informe de la non lecture.
Else
AddGadgetItem(#Listview_0, -1, "Impossible de lire le fichier de configuration !")
EndIf
EndProcedure
Procedure Open_Window_0() ; Ouvre la fenêtre principale
If OpenWindow(#Window_0, 297, 133, 350, 489, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Vérificateur de fichiers")
If CreateGadgetList(WindowID())
ProgressBarGadget(#ProgressBar_0, 20, 30, 310, 30, 0, nbdirectories)
TextGadget(#Text_0, 20, 10, 310, 20, "")
TextGadget(#Text_1, 20, 60, 310, 20, "")
ListViewGadget(#Listview_0, 20, 80, 310, 370)
ButtonGadget(#Button_1, 20, 460, 150, 20, "Vérifier")
ButtonGadget(#Button_2, 180, 460, 150, 20, "Quitter")
EndIf
EndIf
EndProcedure
.
@cookie : la LEN ne se préocupe pas des fichiers musicaux (encore qui lit lit la ligue et autres et qui y croit). Elle se préocupe de tous ce qui est illégal. Nulpart il n'y a écrit si tu Dl un film c'est ok, amis un CD de muisque t'es cuit. Nulpart, il ne faut pas croire tout ce qui est dit sur forum est autres (surtout de ceux qui clament haut et fort être avocats). Je ne peux pas tester leur illégalité
. La c'est clair que ca n'aide pas. De plus cette loi ne m'inquiete pas. Je l'attendais depuis très longtemps. Ya juste la partie sur les hébergeurs qui me dérange un poil.
En plus tu confond les torchons et les serviettes. Ton article parle de la LIL et non la LEN qui sont deux lois bien différentes.