Question Compression Gzip .NET

Plus d'informations
il y a 17 ans 1 mois #4107 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Compression Gzip .NET
Bon, j'ai commencé à regarder, je n'ai pas le temps de continuer pour l'instant, si quelqu'un veut reprendre...

Pour l'instant j'ai vu qu'on peut énumérer les fichiers d'une dossier compressé, et que chaque fichier peut être manipulé via des verbes (équivalents aux commandes disponibles dans le menu contextuel) :

[code:1]
PS> $shell = new-object -com shell.application
PS> $zip = $shell.namespace(\"c:\temp\monarchive.zip\"«»)
PS> $zip.items()

... # liste des fichiers contenus dans monarchive.zip

PS> $zip.parsename(\"monfichier.txt\"«»)

... # retourne le fichier correspondant au nom

PS> $monfichier = $zip.parsename(\"monfichier.txt\"«»)
PS> $monfichier.verbs()

Application Parent Name

----
&Open
Cu&t
&Copy
&Delete
P&roperties


PS> $monfichier.invokeverb(\"Delete\"«») # pouf! supprimé!
[/code:1]
De la même façon qu'on peut supprimer un fichier de l'archive, on devrait pouvoir le copier dans un autre répertoire.

Problème: le verbe \"Copy\" copie le fichier dans le presse-papiers.

Solution: utiliser la classe System.Windows.Forms.Clipboard pour manipuler le presse-papiers.

Bon, déjà il faut démarrer PowerShell en mode STA (uniquement disponible avec la v2 CTP) pour pouvoir manipuler cette classe. Pour ça, exécuter:

[code:1]
PS> powershell -sta
[/code:1]
A partir de là on peut travailler sur le presse-papiers:

[code:1]
PS> $null = [reflection.assembly]::LoadWithPartialName(\"system.windows.forms\"«»)
PS> $shell = new-object -com shell.application
PS> $zip = $shell.namespace(\"c:\temp\monarchive.zip\"«»)
PS> $file = $zip.parsename(\"monfichier.txt\"«»)
PS> $file.invokeverb(\"Copy\"«»)
PS> $clip = [windows.forms.clipboard]::GetDataObject()
PS> $clip.GetFormats()
Shell IDList Array
FileGroupDescriptorW
FileContents
[/code:1]
Voilà, j'en suis là. Si le contenu du presse-papiers était du simple texte ou même une image, je saurais récupérer son contenu, mais là je bloque.

J'essaierai de m'y remettre en fin de journée, pas sûr que j'aie le temps. N'hésitez pas à poursuivre la discussion si vous pouvez avancer (ou si vous trouvez une autre piste).

Janel

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

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

N'hésitez pas à poursuivre la discussion si vous pouvez avancer (ou si vous trouvez une autre piste).

Pour GetDataObject je regarde ça, je dois avoir qq chose sur le sujet.
Ensuite vu la nouvelle fonctionnalité m'est avis que la DLL C# dédiée à la compression faciliterait le développement de ce script.
Comme le script doit être déployé sur le serveur dans un répertoire dédié je suppose, lui associer une DLL, dans ce même répertoire n'a pas d'impact majeur sur la configuration du serveur.
Et puis la maintenance de ce script s'en trouvera facilité.

De mon coté j'ai essayé avec le premier script, basé sur la compression dispos dans le framework, mais sur mon poste le script d'Arnaud compresse bien le fichier mais pas en une archive valide :S

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 mois #4111 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Compression Gzip .NET
C'est quoi la DLL C# en question?

Perso je n'ai pas utilisé le script d'Arnaud mais une variante de celui cité par GirardJames :

[code:1]
filter ConvertTo-Zip
{
param([string]$zipfilename)

begin
{
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)
}

process
{
$zipPackage.CopyHere($_.FullName)
}
}
[/code:1]
Pour rendre à César ce qui est à César, il me semble que ce script a été publié la première fois par MOW, grand MVP PowerShell devant l'Eternel et également célèbre sous le pseudo \"The PowerShell Guy\". Le script devait s'appeler \"out-zip\" à l'époque.

Janel

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

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

C'est quoi la DLL C# en question?

ICSharpCode.SharpZipLib.dll , elle est utilisée par les cmdlet de PSCX (PowerShell Community Extensions).

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 mois #4115 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Compression Gzip .NET
Une fonction basée sur cette DLL, par Tobias Weltner.

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 mois #4132 par Girard James
Réponse de Girard James sur le sujet Re:Compression Gzip .NET
Bonjour,

Après quelques tests et recherche, j'ai en local un executable qui me permet de zipper (Zip.exe et Unzip.exe)

C'est un petit éxecutable fournit avec Oracle. (en cherchant dans le path du CMD).

Ma question serait de pouvoir exploiter cet exec dans powershell sur une autre machine.

C:\Documents and Settings\user>zip
Copyright (C) 1990-1996 Mark Adler, Richard B. Wales, Jean-loup Gailly
Onno van der Linden and Kai Uwe Rommel. Type 'zip -L' for the software License.
Zip 2.1 (April 27th 1996). Usage:
zip [-options] [-b path] [-t mmddyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name - to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete files)
-k force MSDOS (8+3) file names -g allow growing existing zipfile
-r recurse into directories -j junk (don't record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-b use \"path\" for temp file -t only do files after \"mmddyy\"
-@ read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zip file prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-$ include volume label -S include system and hidden files
-h show this help -n don't compress these suffixes



Il existe également une autre executable nomé unzip.exe

Ensuite, que dois-je faire pour faire fonctionner cet exec sur un autre environnement avec PS?

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

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