Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <Array.au3>
#include <String.au3>
GUICreate("dir_transfer",255,95)
GUICtrlCreateLabel("Que souhaitez-vous faire ?",5,3,200,20)
$menu1=GUICtrlCreateMenu("Fichier")
$menu2=GUICtrlCreateMenu("Aide")
$menu3=GUICtrlCreateMenuItem("Compiler",$menu1)
$menu4=GUICtrlCreateMenuItem("Décompiler",$menu1)
$apropos=GUICtrlCreateMenuItem("A propos de dir_transfer",$menu2)
$meserr=GUICtrlCreateMenuItem("Messages d'erreur",$menu2)
$aide=GUICtrlCreateMenuItem("Aide",$menu2)
$button1=GUICtrlCreateButton("Compiler un dossier",5,20,120,50)
$button2=GUICtrlCreateButton("Décompiler un fichier",130,20,120,50)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $apropos
MsgBox(0,"A propos de dir_transfer","Version 1.0.2"&@CRLF&"© 2011 ARTHOS CORPORATION"&@CRLF&"Dir_transfer est un logiciel qui permet de regrouper plusieurs dossiers et fichiers au sein d'un seul fichier."&@CRLF&"Attention, vous n'êtes pas autorisés à modifier le nom ou le contenu d'un fichier DRT. Toute modification risque de rendre le fichier innutilisable."&@CRLF&"Logiciel programé par ARTHOS CORPORATION"&@CRLF&"Pour plus d'informations, contactez arthos.corporation@gmail.com")
Case $meserr
$errorer = InputBox("dir_transfer","Veuillez entrer le code de l'erreur :")
$msger=IniRead(@ScriptDir&"\error.ini", "#error#", "#"&$errorer&"#", "Code d'erreur invalide")
MsgBox(0,"dir_transfer","Code d'erreur : "&$errorer&@CRLF&$msger)
Case $aide
MsgBox(0,"Aide dir_transfer","Compiler :"&@CRLF&"Compiler sert à rassembler touts les dossier et fichiers présents dans un dossier donner sous un seul fichier DRT."&@CRLF&"Décompiler :"&@CRLF&"Décompiler sert à recréer les dossiers et fichiers à partir d'un fichier DRT"&@CRLF&"Messages d'erreur :"&@CRLF&"Messages d'erreur sert à savoir de quel erreur il s'agit en fonction du code d'erreur")
Case $GUI_EVENT_CLOSE
Exit
Case $button1
GUIDelete()
ExitLoop
Case $menu3
GUIDelete()
ExitLoop
Case $menu4
GUIDelete()
_decompiler()
Case $button2
GUIDelete()
_decompiler()
EndSwitch
WEnd
Func _decompiler()
$file = FileOpenDialog("Choisisez un fichier", "", "Fichier DRT (*.drt)|Tous les fichiers (*.*)")
If @error = 1 Then
Exit
EndIf
$var1=FileRead($file,14)
$version=FileRead($file,20)
If $var1 <> "#dir_transfer#" Then
MsgBox(16,"dir_transfer","Erreur :"&@CRLF&@CRLF&"Fichier invalide"&@CRLF&'#dir_transfer# non trouvé dans : '&@CRLF&$file&@CRLF&"Code d'erreur : L1#1#14")
Exit
EndIf
If $version <> "#dir_transfer#1.0.2#" Then
MsgBox(16,"dir_transfer","Erreur :"&@CRLF&@CRLF&"Version incompatible"&@CRLF&$file&" n'est pas compatible avec la version de logiciel que vous utilisez"&@CRLF&"Code d'erreur : V1#IC")
Exit
EndIf
$dir = 0
$file2 = 0
$dirplace=IniRead($file, "#start#", "#name#", "NotFound")
If $dirplace="" Then
MsgBox(16,"dir_transfer","Erreur :"&@CRLF&@CRLF&"Fichier invalide"&@CRLF&'#name# non trouvé dans : '&@CRLF&$file&@CRLF&"Code d'erreur : L5#1#6")
Exit
EndIf
FileWrite(@tempdir&"\temp_dir_transfer",$file)
_ReplaceStringInFile(@tempdir&"\temp_dir_transfer",$dirplace,"")
$filedir=FileRead(@tempdir&"\temp_dir_transfer")
FileDelete(@tempdir&"\temp_dir_transfer")
FileWrite(@tempdir&"\temp_dir_transfer_2",$dirplace)
_ReplaceStringInFile(@tempdir&"\temp_dir_transfer_2",".drt","")
$ilexist=FileRead(@tempdir&"\temp_dir_transfer_2")
FileDelete(@tempdir&"\temp_dir_transfer_2")
$exist = FileExists($filedir&$ilexist)
If $exist = 1 Then
MsgBox(16,"dir_transfer","Erreur :"&@CRLF&@CRLF&"Le dossier existe déjà !"&@CRLF&$filedir&$ilexist&@CRLF&'existe déjà'&@CRLF&"Code d'erreur : D1#EX")
Exit
EndIf
SplashTextOn("dir_transfer","Veuillez patienter pendant que votre fichier se fait décompiler.",220,80,-1,-1,2)
While 1
$dir=$dir+1
$dir_create=IniRead($file, "#start#", "#dir"&$dir&"#", "NotFound")
If $dir_create = "end" Then
ExitLoop
EndIf
DirCreate($filedir&$dir_create)
WEnd
$string=FileRead($file)
While 1
$file2=$file2+1
$file_create=IniRead($file, "#start#", "#file"&$file2&"#", "NotFound")
If $file_create = "end" Then
ExitLoop
EndIf
$filetowrit_e=_StringBetween($string,"<file|"&$file2&"|start>","<file|"&$file2&"|end>")
$binary = Binary($filetowrit_e[0])
FileWrite($filedir&$file_create,$binary)
WEnd
SplashOff()
MsgBox(64,"dir_transfer","Votre fichier à été décompilé.")
Exit
EndFunc
$path = FileSelectFolder ("Choisisez un dossier","C:")
If @error = 1 Then
Exit
EndIf
FileDelete(@TempDir&"\Name.art.tmp")
FileWrite(@TempDir&"\Name.art.tmp",$path)
_ReplaceStringInFile(@TempDir&"\Name.art.tmp","\",@CRLF)
$namedir = FileReadLine(@TempDir&"\Name.art.tmp",_FileCountLines(@TempDir&"\Name.art.tmp"))
FileDelete(@TempDir&"\Name.art.tmp")
FileDelete(@TempDir&"\Slash.art.tmp")
FileWrite(@TempDir&"\Slash.art.tmp",$path)
_ReplaceStringInFile(@TempDir&"\Slash.art.tmp","\",@CRLF)
$numline = _FileCountLines(@TempDir&"\Slash.art.tmp")
$readline = FileReadLine(@TempDir&"\Slash.art.tmp",$numline)
FileDelete(@TempDir&"\Slash.art.tmp")
FileWrite(@TempDir&"\Slash.art.tmp",$path)
_ReplaceStringInFile(@TempDir&"\Slash.art.tmp","\"&$readline,"")
$path2 = FileRead(@TempDir&"\Slash.art.tmp")
FileDelete(@TempDir&"\Slash.art.tmp")
If FileExists($path2 & "\"&$namedir&".drt") Then
$MsgBox = MsgBox(4,"dir_transfer","Le fichier :"&@CRLF&$path2 & "\"&$namedir&".drt"&@CRLF&"existe déjà ! Voulez-vous le supprimer pour pouvoir créer le nouveau fichier ?"&@CRLF&@CRLF&"ATTENTION : Si vous cliquez sur non, le nouveau fichier ne sera pas créé !")
If $MsgBox = 6 Then FileDelete($path2 & "\"&$namedir&".drt")
If $MsgBox = 7 Then Exit
EndIf
If $path = "" Then
Exit
EndIf
SplashTextOn("dir_transfer","Veuillez patienter pendant que votre dossier se fait compiler.",220,80,-1,-1,2)
$FileList = _RecFileListToArray($path, "*", 0, 1, 0)
$list = @TempDir & "\"&$namedir&".drt.tmp"
$txt = FileOpen($list, 1)
FileWrite($txt,"#dir_transfer#1.0.2#"&@CRLF&@CRLF&"[#start#]"&@CRLF&@CRLF&"#name#="&$namedir&".drt"&@CRLF&"#dir1#="&$namedir&@CRLF)
$doss = 2
$filenumb = 1
For $i = 1 to $FileList[0]
If StringInStr(FileGetAttrib($path & "\" & $FileList[$i]), "D") <> 0 Then
FileWriteLine ($txt, @CRLF&"#dir"&$doss&"#="&$namedir&"\" & $FileList[$i])
$doss += 1
Else
FileWriteLine ($txt, "#file"&$filenumb&"#="&$namedir&"\"&$FileList[$i])
$file1 = $path&"\"&$FileList[$i]
$Fname1 = StringTrimLeft($file1, StringInStr($file1, "\", 1, -1))
$Path1 = StringTrimRight($file1, StringLen($Fname1))
$f1 = FileOpen($file1, 16)
$t1 = FileRead($f1)
FileClose($f1)
$z1 = StringRegExp($t1, "(.{1,512})", 3) ; Longeur de ligne (512)
$Ubound1 = UBound($z1)
$String1 = ""
If $Ubound1 = 1 Then
$String1 &= $z1[0]
ElseIf $Ubound1 > 1 Then
$String1 &= $z1[0]
For $i1 = 1 To $Ubound1 - 2 Step 1
$String1 &= $z1[$i1]
Next
$String1 &= $z1[$Ubound1 - 1]
EndIf
FileWriteLine ($txt, "#file"&$filenumb&"|cont#=<file|"&$filenumb&"|start>"&$String1&"<file|"&$filenumb&"|end>")
$filenumb += 1
EndIf
Next
FileWriteLine($txt,"#file"&$filenumb&"#=end"&@CRLF&"#dir"&$doss&"#=end")
FileClose($txt)
Func _RecFileListToArray($sPath, $sFilter = "*", $iFlag = 0, $iRecur = 0, $iFullPath = 0)
Local $asFileList[1], $sFullPath
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If StringRight($sPath, 1) <> "\" Then $sPath = $sPath & "\"
If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
If Not ($iRecur = 0 Or $iRecur = 1) Then Return SetError(4, 4, "")
If $iFullPath = 0 Then
$sFullPath = $sPath
ElseIf $iFullPath = 1 Then
$sFullPath = ""
Else
Return SetError(5, 5, "")
EndIf
_FLTA_Search($sPath, $sFilter, $iFlag, $iRecur, $sFullPath, $asFileList)
If $asFileList[0] = 0 Then Return SetError(6, 6, "")
Return $asFileList
EndFunc
Func _FLTA_Search($sStartFolder, $sFilter, $iFlag, $iRecur, $sFullPath, ByRef $asFileList)
Local $hSearch, $sFile
If StringRight($sStartFolder, 1) <> "\" Then $sStartFolder = $sStartFolder & "\"
$hSearch = FileFindFirstFile($sStartFolder & $sFilter)
If $hSearch > 0 Then
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
Switch $iFlag
Case 0
If $iRecur And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop
Case 1
If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop
Case 2
If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") = 0 Then ContinueLoop
EndSwitch
If $iFlag = 1 And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop
If $iFlag = 2 And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") = 0 Then ContinueLoop
_FLTA_Add($asFileList, $sFullPath, $sStartFolder, $sFile)
WEnd
FileClose($hSearch)
ReDim $asFileList[$asFileList[0] + 1]
EndIf
If $iRecur = 1 Then
$hSearch = FileFindFirstFile($sStartFolder & "*.*")
If $hSearch > 0 Then
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") And ($sFile <> "." Or $sFile <> "..") Then
If $iFlag <> 1 Then _FLTA_Add($asFileList, $sFullPath, $sStartFolder, $sFile)
_FLTA_Search($sStartFolder & $sFile, $sFilter, $iFlag, $iRecur, $sFullPath, $asFileList)
EndIf
WEnd
FileClose($hSearch)
EndIf
EndIf
EndFunc
Func _FLTA_Add(ByRef $asFileList, $sFullPath, $sStartFolder, $sFile)
Local $sAddFolder
$asFileList[0] += 1
If UBound($asFileList) <= $asFileList[0] Then ReDim $asFileList[UBound($asFileList) * 2]
If $sFullPath = "" Then
$sAddFolder = $sStartFolder
Else
$sAddFolder = StringReplace($sStartFolder, $sFullPath, "")
EndIf
$asFileList[$asFileList[0]] = $sAddFolder & $sFile
EndFunc
FileMove(@TempDir & "\"&$namedir&".drt.tmp",$path2 & "\"&$namedir&".drt")
SplashOff()
MsgBox(64,"dir_transfer","Votre dossier à été compilé."&@CRLF&"ATTENTION, vous ne devez pas modifier le nom ou le contenu du fichier DRT."&@CRLF&"Toute modification risque de rendre le fichier inutilisable.")
Exit