[...]Problème ZIP recursif avec caractères spéciaux

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
misterb
Niveau 1
Niveau 1
Messages : 2
Enregistré le : jeu. 01 sept. 2016 11:00
Status : Hors ligne

[...]Problème ZIP recursif avec caractères spéciaux

#1

Message par misterb »

Bonjour à tous,
Petit nouveau sur Autoit, je me permets de vous demander de l'aide.

Besoins
J'essaye de développer un script permettant de "zipper" (de manière recursive) l'ensemble des fichiers d'un dossier.

Script

Code : Tout sélectionner

 Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)
#include <File.au3>
#include <Array.au3>
#include <FileListToArrayXT.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <string.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <Misc.au3>
#include <File.au3>
#include <Process.au3>
#include <Constants.au3>
#include <string.au3>
#include <Array.au3>
#include <Date.au3>
#include "RecFileListToArray.au3"
#include <File.au3>
#include <7Zip.au3>
$dossier_a_archiver=StringFormat("%s",@scriptdir)
$fichier_erreur=StringFormat("%s\erreur_zip.txt",@scriptdir)



$listing = _RecFileListToArray($dossier_a_archiver, "*", 2, 0, 1, 2, "", "")
	If @error <> 1 Then
		If @error <> 4 Then
			For $i = 1 To $listing[0]
				$dossier_level1 = $listing[$i]
				$listing2 = _RecFileListToArray($dossier_level1, "*", 1, 1, 1, 2, "", "*.zip;*.tar.gz;*.rar")
				If @error <> 1 Then
					If @error <> 4 Then
						For $j = 1 To $listing2[0]
							$FileName=$listing2[$j]

							if not StringInStr($filename,".zip")  then
								if not StringInStr($filename,".rar")  then
									if not StringInStr($filename,".7z")  then


												$ArcFile=StringFormat("%s.zip",$filename)

												$retResult = _7ZipAdd(0, $ArcFile, $FileName)
												If @error Then

													FileWriteLine($fichier_erreur,$filename)
					;~ 								MsgBox(16, "_7ZipAdd", "Error occurred")
												Else
													if FileExists($ArcFile) and FileGetSize($ArcFile) >1001 Then
					;~ 								MsgBox(64, "_7ZipAdd", "Archive created successfully" & @LF & $retResult)
					Sleep(1000)
														FileDelete($FileName)
													Else
					;~ 									MsgBox(64, "Fichier no", "Archive created successfully" & @LF & $retResult)
														$msg=StringFormat("***fichier %s PB de ZIP***",$filename)
														FileWriteLine($fichier_erreur,$msg)
													EndIf
												EndIf


									EndIf

								EndIf

							EndIf

						Next
					EndIf
				EndIf
			Next
		EndIf
	EndIf
Problème

Bien que rudimentaire , ce code semble fonctionner mais uniquement sur des fichiers/dossiers sans accents ou autre caractère spéciaux.

Tentative de Résolution
  • J'ai essayer de remplacer les caractères via un stringreplace mais cela ne corrige pas vraiment le problème.
    J'ai essayer de passer par file=>encodage (sans succès)
Merci d'avance pour vos réponses éclairées.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [...]Problème ZIP recursif avec caractères spéciaux

#2

Message par walkson »

Bonjour et bienvenue,
peut être la solution ?
https://www.autoitscript.fr/forum/viewt ... zip#p97081
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
misterb
Niveau 1
Niveau 1
Messages : 2
Enregistré le : jeu. 01 sept. 2016 11:00
Status : Hors ligne

Re: [...]Problème ZIP recursif avec caractères spéciaux

#3

Message par misterb »

Bonjour,

Merci de t'être pencher sur mon problème.

Après utilisation des lignes de commande, le problème est entier.

Voici mon code

Code : Tout sélectionner

 
 
 -------------------------------------------------------

; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)
#include <File.au3>
#include <Array.au3>
#include <FileListToArrayXT.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <string.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <Misc.au3>
#include <File.au3>
#include <Process.au3>
#include <Constants.au3>
#include <string.au3>
#include <Array.au3>
#include <Date.au3>
#include "RecFileListToArray.au3"
#include <File.au3>
#include <7Zip.au3>
$dossier_a_archiver=StringFormat("%s\est",@scriptdir)
$fichier_erreur=StringFormat("%s\erreur_zip.txt",@scriptdir)



$listing = _RecFileListToArray($dossier_a_archiver, "*", 2, 0, 1, 2, "", "")
	If @error <> 1 Then
		If @error <> 4 Then
			For $i = 1 To $listing[0]
				$dossier_level1 = $listing[$i]
				$listing2 = _RecFileListToArray($dossier_level1, "*", 1, 1, 1, 2, "", "*.zip;*.tar.gz;*.rar")
				If @error <> 1 Then
					If @error <> 4 Then
						For $j = 1 To $listing2[0]
							$FileName=$listing2[$j]

							if not StringInStr($filename,".zip")  then
								if not StringInStr($filename,".rar")  then
									if not StringInStr($filename,".7z")  then


												$ArcFile=StringFormat("%s.zip",$filename)

;~ 												$retResult = _7ZipAdd(0, $ArcFile, $FileName)
$ldc=StringFormat("a %s %s°",$ArcFile,$FileName)

ShellExecute("7za.exe",$ldc)
												If @error Then

													FileWriteLine($fichier_erreur,$filename)
					;~ 								MsgBox(16, "_7ZipAdd", "Error occurred")
												Else
													if FileExists($ArcFile) and FileGetSize($ArcFile) >1001 Then
					;~ 								MsgBox(64, "_7ZipAdd", "Archive created successfully" & @LF & $retResult)
					Sleep(1000)
														FileDelete($FileName)
													Else
					;~ 									MsgBox(64, "Fichier no", "Archive created successfully" & @LF & $retResult)
														$msg=StringFormat("***fichier %s PB de ZIP***",$filename)
														FileWriteLine($fichier_erreur,$msg)
													EndIf
												EndIf


									EndIf

								EndIf

							EndIf

						Next
					EndIf
				EndIf
			Next
		EndIf
	EndIf



En fait, le zip est bien créé (éà.txt=>éà.zip) mais est vide.

Merci d'avance.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [...]Problème ZIP recursif avec caractères spéciaux

#4

Message par walkson »

êtes vous sûr que la fonction _RecFileListToArray() fonctionne bien ? avec un _arraydisplay()
A titre indicatif il y a _FileListToArrayRec () qui devrait faire la même chose (voir l'aide F1)
Sinon mettez des mouchards dans votre code pour trouver l’erreur (msgbox, consolewrite, tooltip)

[edit] éviter les codes plus vieux que 2014 car cette année là Autoit est passé à 3.3.12.0 avec beaucoup de changements
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre