Question Compression Gzip .NET

Plus d'informations
il y a 17 ans 1 mois #4038 par Girard James
Réponse de Girard James sur le sujet Re:Compression Gzip .NET
Voici la fonction en question :

[code:1]function converto-Zip
{
param([string]$zipfilename)

if(-not (test-path($zipfilename)))
{
set-content $zipfilename (\"PK\" + [char]5 + [char]6 + (\"$([char]0)\" * 18))
(dir $zipfilename).IsReadOnly = $false
}

$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)

foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}[/code:1]
C'est la même qu'un peu plus haut mais nomé Addto-Zip :P

Je n'ai pas tout saisi de ta réponse mais je vais regarder ça de plus pret... Demain :laugh:

Merci bcp de l'interet apporté à ma question!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4040 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Compression Gzip .NET
girardjames écrit:

C'est la même qu'un peu plus haut mais nomé Addto-Zip

ça va mieux en le disant ;)

Je viens de faire un essai, ce que je constate est que la gestion des caractères accentués pose pb, les fichiers verrouillés aussi. Avec cette manière de faire, la compression se fait dans un thread, donc en tâche de fond et en asynchrone.
Selon la taille des fichiers le traitement de compression peut ne pas être terminé lors de l'exécution du move-item.

Quant à l'explication donnée elle concerne la gestion de la mémoire sous .NET, code managé, ici aussi c'est un pb de verrouillage, mais en code natif (API Win32).
Une autre piste ICSharpCode.SharpZipLib.Zip ou PScx <br><br>Message édité par: Laurent Dardenne, à: 13/02/09 11:57

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4053 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Compression Gzip .NET
Salut,

Voici le code qui fonctionne de l'exemple issu du livre :

[code:1]function Convert-ToGzip {

param ([string] $fichier)
if(Test-Path $fichier)
{
$Stream = New-Object system.IO.FileStream $fichier,'open'
$buffer = New-Object System.Byte[] $Stream.length
$Stream.Read($buffer,0,$Stream.length)
$Stream.Close()
$nom_zip=$fichier + '.Gzip'
$Stream = New-Object system.IO.FileStream $nom_zip, 'create'
$fichierzip = New-Object System.IO.Compression.GZipStream($Stream,'compress',0)
$fichierzip.Write($buffer,0,$buffer.Length)
$fichierzip.close()
Write-Host 'Fin de compression'
}
}[/code:1]

Tu avais fait quelques fautes de frappe autour de \&quot;.lenght\&quot; au lieu de \&quot;.length\&quot;, un classique !

La fonction Add-Zip est un peu mieux dans la mesure où elle permet de regrouper des fichiers dans une archive alors que l'exemple du livre ne permet que de compresser un fichier unitaire.

Par contre, on peut remarquer que dans un cas on utilise un objet COM et dans l'autre on utilise le Framework .Net. Preuve une fois encore qu'il existe maintes et maintes façons d'arriver à son objectif.

Arnaud<br><br>Message édité par: Arnaud, à: 14/02/09 16:40

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4064 par Girard James
Réponse de Girard James sur le sujet Re:Compression Gzip .NET
Il n'y a donc pas de recours pour pouvoir gérer la compression et la copie dans un seul bloc?

J'ai pour le moment dissocié les 2 actions sur 2 boutons dans une form.
1 bouton pour Archiver. (puis une fois l'archive achevé)
1 bouton pour Déplacer le fichier en question.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4067 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Compression Gzip .NET
girardjames écrit:

Il n'y a donc pas de recours pour pouvoir gérer la compression et la copie dans un seul bloc?

Si, mais à mon avis pas avec l'approche basée sur les objets du Shell.
Regarde sur le site PoshCode ou utilise un outil en ligne de commande tel que Pkzip

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4098 par Girard James
Réponse de Girard James sur le sujet Re:Compression Gzip .NET
Je re-contre-attaque pour cette question.

J'ai tourner cette histoire dans tout les sens.
ET j'ai essayé de bidouiller un peu mon scrpit afin de pouvoir arriver à un résultat...

Laurent Dardenne a écrit :
[code:1]Regarde sur le site PoshCode ou utilise un outil en ligne de commande tel que Pkzip [/code:1]

Cette solution ne répond pas vraiment à mon besoin, je dois pouvoir effectuer ma tâche à travers mon script uniquement.

[code:1]function Zipdonnees ()
{
get-item $listBox1.Items | Converto-Zip d:\Sauvegarde_Complete_$computername.zip
get-item c:\temp | Converto-Zip d:\Sauvegarde_temoin.zip
$testpath = $false
do
{
$testpath = Test-Path \&quot;d:\Sauvegarde_temoin.zip\&quot; -IsValid
Move-Item -Path d:\Sauvegarde_Complete_$computername.zip -Destination U:\ -ErrorAction SilentlyContinue
}
while ($testpath = $false)


Move-Item -Path d:\Sauvegarde_Complete_$computername.zip -Destination U:\
$Button6.Enabled = $true
}[/code:1]

J'ai donc fais 2 compression à la suite, j'ai vérifié, les compression se font à la chaîne, l'une derrière l'autre.

L'archive témoin sera donc généré dès que la première sera terminé.
L'archive témoins pèse 3 fois rien, (1ko : fichier de log)

Mais je n'arrive toujours pas à trouver une solution à mon problème.

Je souhaiterai tester l'existance du fichier témoin afin de lancer le déplacement de fichier.

Est-ce possible de faire de cette manière?
Pouvez-vous m'aider à trouver un moyen, je planche dessus depuis un certain moment et je fatigue a vrai dire...

Merci d'avance!

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.087 secondes
Propulsé par Kunena