Obtenir fonctionnalité de zip gratuit


vous cherchez un moyen d'intégrer zip et décompressez fonctionnalité dans votre application sur le bon marché? Voici le plan et Fernando Vicaria a même enveloppé le tout dans un joli petit composant pour vous!


Cet article est paru initialement dans les Développeur Delphi
le droit d'Auteur Pinnacle Publishing, Inc. Tous droits réservés.



Vous avez besoin d'un morceau de fonctionnalité. Achetez-vous d'un composant ou d'retrousser vos manches et de commencer sur la conception vous-même? Très souvent, vous pouvez trouver un freeware composant qui fait le travail. Malheureusement, il est également fréquent que ces éléments ne viennent pas avec source ou le sont moins que parfait. Et si vous êtes comme moi, vous détestez rien ajouter à votre application qui n'est pas fourni avec le code source ou n'a pas été été entièrement testé.
Si une fonction supplémentaire que vous avez besoin est la capacité de compresser ou de décompresser des fichiers à l'aide de la norme de l'industrie en format Zip, puis, vous êtes dans la chance!
WinZip 7.0 (et versions ultérieures) a maintenant sa propre ligne de commande de soutien. Cette incroyablement utile add-on est disponible pour téléchargement à partir de Nico Mak Computing Inc. sur son site Web: http://www.winzip.com.
Ce qui est si grand au sujet d'une ligne de commande? Pensez à ce sujet. Maintenant, vous pouvez créer un composant pour appeler le programme en ligne de commande, et tous vos problèmes seront résolus!
Voici une façon de le faire.
Pour WinZip
tout d'Abord, vous devez installer WinZip 7.0. Si vous avez déjà une autre version de WinZip, les mises à jour peuvent être téléchargées gratuitement à partir de l'URL que je viens de mentionner.
une Fois que vous avez la dernière version, la prochaine étape est de télécharger et installer la ligne de commande add-on. Une fois que vous avez installé, assurez-vous qu'ils ont été ajoutés à votre chemin d'accès.
Maintenant, si vous pouvez construire un composant à l'appel de la ligne de commande du programme et de passer les bonnes instructions à exécuter WinZip, qui ferait de compresser et décompresser les fichiers dans votre application simple!
Un type énuméré et la déclaration
Ceci est un exemple typique de ce que la programmation orientée objet (et, plus spécifiquement, Delphi) est tout au sujet. La première chose que vous devez faire est de créer un type énuméré où vous pouvez spécifier quelle direction vous voulez aller (compresser ou décompresser):
TZipState = (zsCompress, zsDecompress)
Ce type vous permettra de basculer entre les deux actions possibles de la composante. Listing 1 montre la déclaration des constituants.
Listing 1. La compression/décompression de la composante de la déclaration.
TFVWinZip = class(TComponent)
& nbsp & nbsp privé
& ! & ! & ! & nbsp { Private declarations }
& ! & ! & ! & nbsp Ffichier: string
& ! & ! & ! & nbsp FUseFileList: boolean
& ! & ! & ! & nbsp FFileList: TStringList
& ! & ! & ! & nbsp FZipFileName: string
& ! & ! & ! & nbsp FZipState: TZipState
& ! & ! & ! & nbsp FOnExecute: TNotifyEvent
& ! & ! & ! & nbsp fonction GetFileList: TStringList
& ! & ! & ! & nbsp procédure SetFileList(valeur: TStringList)
& ! & ! & ! & nbsp procédure CreateCompressBat
& nbsp & nbsp publié
& ! & ! & ! & nbsp { Publié des déclarations }
& ! & ! & ! & nbsp propriété FileName: string
& ! & ! & ! & ! & ! & nbsp lire Ffichier écrire Ffichier
& ! & ! & ! & nbsp propriété UseFileList: boolean
& ! & ! & ! & ! & ! & nbsp lire FUseFileList écrire FUseFileList
& ! & ! & ! & ! & ! & nbsp False par défaut
& ! & ! & ! & nbsp propriété FileList: TStringList
& ! & ! & ! & ! & ! & nbsp lire GetFileList écrire SetFileList
& ! & ! & ! & nbsp propriété ZipState: TZipState
& ! & ! & ! & ! & ! & nbsp lire FZipState écrire FZipState
& ! & ! & ! & nbsp propriété ZipFileName: string
& ! & ! & ! & ! & ! & nbsp lire FZipFileName écrire FZipFileName
& ! & ! & ! & nbsp propriété OnExecute: TNotifyEvent
& ! & ! & ! & ! & ! & nbsp lire FOnExecute écrire FOnExecute
& nbsp & nbsp public
& ! & ! & ! & nbsp { déclarations Publiques }
& ! & ! & ! & nbsp constructor Create(AOwner: TComponent) remplacer
& ! & ! & ! & nbsp destructeur de Détruire remplacer
& ! & ! & ! & nbsp procédure d'Exécution
& nbsp & nbsp fin
la Plupart de ses propriétés et méthodes doivent être auto-explicatif. Vous pouvez trouver la pleine mise en œuvre dans le fichier FVWinZip.pas.
la mise en Œuvre des déclarations
Si vous regardez le début de la mise en œuvre de la section du code, vous verrez le code suivant:
{$R FVWinZip.res}
const
& nbsp & nbsp BatchFile = 'tfvzip.bat'
& nbsp & nbsp Zip = 'wzzip'
& nbsp & nbsp Décompresser = 'wzunzip'
& nbsp & nbsp ListName = 'zipit.lst'
La première ligne devrait être très familier pour ceux qui sont utilisés pour la création de leurs propres composants. Il spécifie le fichier de ressources qui contient l'icône de notre composant. Vous pouvez créer et concevoir vos propres icônes en utilisant toutes les ressources de l'éditeur (en Delphi, la valeur par défaut est Imagedit.exe, qui peut être trouvé dans le répertoire bin).
Les constantes déclarées ici va vous aider à composer avec les différents fichiers utilisés dans le processus de la création ou de l'extraction de nos fichiers zip.
fichier batch est le nom du fichier batch qui va être créé par notre composant. Ce fichier a la responsabilité d'appeler l'un des fichiers zip (Zip pour compresser ou Décompressez pour la décompression). La dernière est la ListName, , qui est le nom d'un fichier texte qui contient une liste des fichiers à ajouter dans le fichier Zip ainsi que les commandes pour le programme en ligne de commande (comme vous le feriez dans un fichier batch et le DOS). ListName est utilisé uniquement lorsque la propriété UseFileList de notre Zip composant est défini sur true et une liste de fichiers est entré dans la liste de Fichiers de la propriété.
Comme je l'ai mentionné plus tôt, ce n'est qu'une des implémentations possibles pour ce composant, il y a certainement place à l'amélioration. Regardez le fichier d'Aide en ligne fournie avec le logiciel WinZip Command Line Support Add-on pour plus d'informations.
La mise en œuvre du code
Il y a deux méthodes importantes dans la mise en œuvre de l'article, je voudrais décrire pour vous.
La première est la procédure CreateCompressBat (voir Listing 2). Dans cette procédure, vous créez un fichier de commandes en fonction des besoins de l'utilisateur. Il précise les mesures à prendre (compression/décompression), le nom du fichier à compresser, le nom du fichier zip, et si vous utilisez un fichier de liste ou pas.
Listing 2. Le CreateCompressBat routine.
procédure TFVWinZip.CreateCompressBat
var
& nbsp & nbsp F: fichier Texte
& nbsp & nbsp Commande: string
begin
& nbsp & nbsp essayer
& ! & ! & ! & nbsp si FzipState = zsCompress puis
& ! & ! & ! & ! & ! & nbsp Commande:= Zip
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp Commande:= Décompresser
& ! & ! & ! & nbsp { Créer compresser fichier de commandes }
& ! & ! & ! & nbsp AssignFile(F, BatchFile)
& ! & ! & ! & nbsp Rewrite(F)
& ! & ! & ! & nbsp Writeln(F, '@ECHO OFF')

& ! & ! & ! & nbsp Writeln(F, ' REM *** TFVWinZip par F Vicaria ***')
& ! & ! & ! & nbsp si UseFileList puis
& ! & ! & ! & ! & ! & nbsp Writeln(F, Commande ' '' ZipFileName
& ! & ! & ! & ! & ! & ! & ! & ! '' '' '@zipit.lst' ''')
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp Writeln(F, la Commande ' '' ZipFileName
& ! & ! & ! & ! & ! & ! & ! & ! '' '' nom de fichier ''')
& ! & ! & ! & nbsp Writeln(F, 'cd\')
& ! & ! & ! & nbsp Writeln(F, 'cls')
& nbsp & nbsp enfin
& ! & ! & ! & nbsp CloseFile(F)
& nbsp & nbsp fin
fin
le second est Le cœur de notre composant. La méthode Execute (voir le Listing 3) va initier un processus distinct qui va exécuter le fichier de commandes, qui seront, à leur tour, appellent de WinZip ligne de commande. Cela permettra d'éviter toute sorte de dépendance de la vitesse de la machine qui exécute le programme. Pour ce faire, j'utilise les deux fonctions de l'API-CreateProcess et WaitForSingleObject (vérifier l'API Windows fichier d'Aide pour plus de détails sur la façon d'utiliser ces fonctions).
Listing 3. L'Exécution de la routine.
procédure TFVWinZip.Exécuter
var
& nbsp & nbsp ProcessInfo: TProcessInformation
& nbsp & nbsp StartupInfo: TStartupInfo
& nbsp & nbsp Fermé: boolean
& nbsp & nbsp OldTime: TDateTime
begin
& nbsp & nbsp si Affecté(FOnExecute) puis FOnExecute(Auto)
& nbsp & nbsp essayer
& ! & ! & ! & nbsp { Chech UseFileList est définie ou si
& ! & ! & ! & ! & ! & nbsp nom de fichier ou un nom de fichier valide }
& ! & ! & ! & nbsp si UseFileList puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si la liste des Fichiers.Count= 0 then
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp MessageDlg('Pas de fichier à compresser!',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp mtError, [bakang], 0)
& ! & ! & ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & nbsp FileList.SaveToFile(ListName)
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp else
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si pas FileExists(nom de fichier) puis
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp MessageDlg(
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! 'Programme ne peut pas trouver le fichier à compresser!',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp mtError, [bakang], 0)
& ! & ! & ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp { Si ZipFileName est vide utiliser le nom de fichier
& ! & ! & ! & ! & ! & nbsp comme le nom par défaut }
& ! & ! & ! & nbsp si ZipFileName='
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si le nom de fichier<>'
& ! & ! & ! & ! & ! & ! & ! & nbsp ZipFileName:= ChangeFileExt(nom de fichier,'.zip')
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & nbsp ZipFileName:='Untitled.zip'
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp { Créer un fichier de commandes }
& ! & ! & ! & nbsp CreateCompressBat
& ! & ! & ! & nbsp { Préparer les paramètres de la fenêtre pour le processus }
& ! & ! & ! & nbsp FillChar(StartupInfo, SizeOf(TStartupInfo), 0)
& ! & ! & ! & nbsp avec StartupInfo ne
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp cb:= SizeOf(TStartupInfo)
& ! & ! & ! & ! & ! & nbsp dwFlags:= STARTF_USESHOWWINDOW
& ! & ! & ! & ! & ! & nbsp wShowWindow:= SW_MINIMIZE
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp { Exécuter le fichier de commandes comme des processus séparés }
& ! & ! & ! & nbsp CreateProcess(PChar(fichier batch), nil, nil, nil,
& ! & ! & ! & ! & ! & nbsp Faux, NORMAL_PRIORITY_CLASS,
& ! & ! & ! & ! & ! & nbsp néant, de néant, StartupInfo, ProcessInfo)
& ! & ! & ! & nbsp { Attendre pour que le processus de finition ou de
& ! & ! & ! & ! & ! & nbsp annuler au bout de 10 secondes }
& ! & ! & ! & nbsp Fermé:= False
& ! & ! & ! & nbsp OldTime:= Maintenant
& ! & ! & ! & nbsp repeat
& ! & ! & ! & ! & ! & nbsp cas WaitForSingleObject(
& ! & ! & ! & ! & ! & ! & ! & nbsp ProcessInfo.hProcess, 100)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp WAIT_OBJECT_0 : Fermé:= True
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp WAIT_FAILED : RaiseLastWin32Error
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp Application.ProcessMessages
& ! & ! & ! & nbsp jusqu' (Fermé) ou (Maintenant>OldTime 10000)
& ! & ! & ! & nbsp { Supprimer le fichier de commandes }
& ! & ! & ! & nbsp DeleteFile(fichier batch)
& ! & ! & ! & nbsp si UseFileList puis
& ! & ! & ! & ! & ! & nbsp DeleteFile(ListName)
& nbsp & nbsp à l'exception de
& ! & ! & ! & nbsp MessageDlg(
& ! & ! & ! & ! & ! & nbsp Programme pourrait ne pas compresser le fichier!',
& ! & ! & ! & ! & ! & nbsp mtError, [bakang],0)
& nbsp & nbsp fin
fin
Après l'exécution du fichier de commandes et, par conséquent, WinZip, la méthode Execute va se débarrasser de tous à l'intérieur sur les fichiers créés pour vous. Une fois le retour de la méthode, tout ce que vous êtes de gauche avec est le fichier Zip que vous avez créé ou vous avez extrait les fichiers.
Enfin
à l'Aide de votre objet ne pouvait pas être plus facile: il suffit d'appeler la méthode Execute après la création de l'objet et de définir certaines de ses propriétés avec les valeurs appropriées (voir l'exemple d'application inclus).
Pour exécuter ce composant, il suffit d'appeler la méthode Execute après avoir rempli les propriétés du composant avec les valeurs appropriées.
l'option La plus simple est de fournir le nom du fichier que vous souhaitez compresser (nom de fichier) et le nom du fichier Zip à créer(ZipFileName).
Note: Si vous souhaitez compresser plusieurs fichiers dans le même fichier Zip, utilisez la liste de Fichiers liste de chaînes.
Le fichier d'Aide fourni avec la ligne de commande add-on pour WinZip vous donner plus d'idées sur la façon d'améliorer ce composant et comment tirer pleinement parti de WinZip dans vos applications.
Un couple de mises en garde...
Vous aurez besoin pour vous assurer que les deux fichiers qui viennent avec le logiciel WinZip Ligne de Commande Add-on (WZZIP.EXE et WZUNZIP.EXE) sont dans votre chemin. Si ils ne le sont pas, vous aurez besoin de les déplacer dans votre répertoire système.
une Autre chose à retenir est que ces fichiers sont gratuit uniquement pour ceux qui ont acheté WinZip et mis à niveau vers la version 7 ou ultérieure. À mon avis, ce qui peut à peine être considéré comme un inconvénient de nos jours. WinZip est devenu le standard de l'industrie utilitaire d'archivage pour l'environnement Windows, et il est très difficile de trouver quelqu'un qui ne l'utilise pas.
Si vous avez des questions ou des commentaires, veuillez me les envoyer à l'adresse [email protected].
les Fichiers associés à cet article: vicaria.zip









Obtenir fonctionnalite de zip gratuit


Obtenir fonctionnalite de zip gratuit : Plusieurs milliers de conseils pour vous faciliter la vie.


vous cherchez un moyen d'integrer zip et decompressez fonctionnalite dans votre application sur le bon marche? Voici le plan et Fernando Vicaria a meme enveloppe le tout dans un joli petit composant pour vous!


Cet article est paru initialement dans les Developpeur Delphi
le droit d'Auteur Pinnacle Publishing, Inc. Tous droits reserves.



Vous avez besoin d'un morceau de fonctionnalite. Achetez-vous d'un composant ou d'retrousser vos manches et de commencer sur la conception vous-meme? Tres souvent, vous pouvez trouver un freeware composant qui fait le travail. Malheureusement, il est egalement frequent que ces elements ne viennent pas avec source ou le sont moins que parfait. Et si vous etes comme moi, vous detestez rien ajouter a votre application qui n'est pas fourni avec le code source ou n'a pas ete ete entierement teste.
Si une fonction supplementaire que vous avez besoin est la capacite de compresser ou de decompresser des fichiers a l'aide de la norme de l'industrie en format Zip, puis, vous etes dans la chance!
WinZip 7.0 (et versions ulterieures) a maintenant sa propre ligne de commande de soutien. Cette incroyablement utile add-on est disponible pour telechargement a partir de Nico Mak Computing Inc. sur son site Web: http://www.winzip.com.
Ce qui est si grand au sujet d'une ligne de commande? Pensez a ce sujet. Maintenant, vous pouvez creer un composant pour appeler le programme en ligne de commande, et tous vos problemes seront resolus!
Voici une façon de le faire.
Pour WinZip
tout d'Abord, vous devez installer WinZip 7.0. Si vous avez deja une autre version de WinZip, les mises a jour peuvent etre telechargees gratuitement a partir de l'URL que je viens de mentionner.
une Fois que vous avez la derniere version, la prochaine etape est de telecharger et installer la ligne de commande add-on. Une fois que vous avez installe, assurez-vous qu'ils ont ete ajoutes a votre chemin d'acces.
Maintenant, si vous pouvez construire un composant a l'appel de la ligne de commande du programme et de passer les bonnes instructions a executer WinZip, qui ferait de compresser et decompresser les fichiers dans votre application simple!
Un type enumere et la declaration
Ceci est un exemple typique de ce que la programmation orientee objet (et, plus specifiquement, Delphi) est tout au sujet. La premiere chose que vous devez faire est de creer un type enumere ou vous pouvez specifier quelle direction vous voulez aller (compresser ou decompresser):
TZipState = (zsCompress, zsDecompress)
Ce type vous permettra de basculer entre les deux actions possibles de la composante. Listing 1 montre la declaration des constituants.
Listing 1. La compression/decompression de la composante de la declaration.
TFVWinZip = class(TComponent)
& nbsp & nbsp prive
& ! & ! & ! & nbsp { Private declarations }
& ! & ! & ! & nbsp Ffichier: string
& ! & ! & ! & nbsp FUseFileList: boolean
& ! & ! & ! & nbsp FFileList: TStringList
& ! & ! & ! & nbsp FZipFileName: string
& ! & ! & ! & nbsp FZipState: TZipState
& ! & ! & ! & nbsp FOnExecute: TNotifyEvent
& ! & ! & ! & nbsp fonction GetFileList: TStringList
& ! & ! & ! & nbsp procedure SetFileList(valeur: TStringList)
& ! & ! & ! & nbsp procedure CreateCompressBat
& nbsp & nbsp publie
& ! & ! & ! & nbsp { Publie des declarations }
& ! & ! & ! & nbsp propriete FileName: string
& ! & ! & ! & ! & ! & nbsp lire Ffichier ecrire Ffichier
& ! & ! & ! & nbsp propriete UseFileList: boolean
& ! & ! & ! & ! & ! & nbsp lire FUseFileList ecrire FUseFileList
& ! & ! & ! & ! & ! & nbsp False par defaut
& ! & ! & ! & nbsp propriete FileList: TStringList
& ! & ! & ! & ! & ! & nbsp lire GetFileList ecrire SetFileList
& ! & ! & ! & nbsp propriete ZipState: TZipState
& ! & ! & ! & ! & ! & nbsp lire FZipState ecrire FZipState
& ! & ! & ! & nbsp propriete ZipFileName: string
& ! & ! & ! & ! & ! & nbsp lire FZipFileName ecrire FZipFileName
& ! & ! & ! & nbsp propriete OnExecute: TNotifyEvent
& ! & ! & ! & ! & ! & nbsp lire FOnExecute ecrire FOnExecute
& nbsp & nbsp public
& ! & ! & ! & nbsp { declarations Publiques }
& ! & ! & ! & nbsp constructor Create(AOwner: TComponent) remplacer
& ! & ! & ! & nbsp destructeur de Detruire remplacer
& ! & ! & ! & nbsp procedure d'Execution
& nbsp & nbsp fin
la Plupart de ses proprietes et methodes doivent etre auto-explicatif. Vous pouvez trouver la pleine mise en œuvre dans le fichier FVWinZip.pas.
la mise en Œuvre des declarations
Si vous regardez le debut de la mise en œuvre de la section du code, vous verrez le code suivant:
{$R FVWinZip.res}
const
& nbsp & nbsp BatchFile = 'tfvzip.bat'
& nbsp & nbsp Zip = 'wzzip'
& nbsp & nbsp Decompresser = 'wzunzip'
& nbsp & nbsp ListName = 'zipit.lst'
La premiere ligne devrait etre tres familier pour ceux qui sont utilises pour la creation de leurs propres composants. Il specifie le fichier de ressources qui contient l'icone de notre composant. Vous pouvez creer et concevoir vos propres icones en utilisant toutes les ressources de l'editeur (en Delphi, la valeur par defaut est Imagedit.exe, qui peut etre trouve dans le repertoire bin).
Les constantes declarees ici va vous aider a composer avec les differents fichiers utilises dans le processus de la creation ou de l'extraction de nos fichiers zip.
fichier batch est le nom du fichier batch qui va etre cree par notre composant. Ce fichier a la responsabilite d'appeler l'un des fichiers zip (Zip pour compresser ou Decompressez pour la decompression). La derniere est la ListName, , qui est le nom d'un fichier texte qui contient une liste des fichiers a ajouter dans le fichier Zip ainsi que les commandes pour le programme en ligne de commande (comme vous le feriez dans un fichier batch et le DOS). ListName est utilise uniquement lorsque la propriete UseFileList de notre Zip composant est defini sur true et une liste de fichiers est entre dans la liste de Fichiers de la propriete.
Comme je l'ai mentionne plus tot, ce n'est qu'une des implementations possibles pour ce composant, il y a certainement place a l'amelioration. Regardez le fichier d'Aide en ligne fournie avec le logiciel WinZip Command Line Support Add-on pour plus d'informations.
La mise en œuvre du code
Il y a deux methodes importantes dans la mise en œuvre de l'article, je voudrais decrire pour vous.
La premiere est la procedure CreateCompressBat (voir Listing 2). Dans cette procedure, vous creez un fichier de commandes en fonction des besoins de l'utilisateur. Il precise les mesures a prendre (compression/decompression), le nom du fichier a compresser, le nom du fichier zip, et si vous utilisez un fichier de liste ou pas.
Listing 2. Le CreateCompressBat routine.
procedure TFVWinZip.CreateCompressBat
var
& nbsp & nbsp F: fichier Texte
& nbsp & nbsp Commande: string
begin
& nbsp & nbsp essayer
& ! & ! & ! & nbsp si FzipState = zsCompress puis
& ! & ! & ! & ! & ! & nbsp Commande:= Zip
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp Commande:= Decompresser
& ! & ! & ! & nbsp { Creer compresser fichier de commandes }
& ! & ! & ! & nbsp AssignFile(F, BatchFile)
& ! & ! & ! & nbsp Rewrite(F)
& ! & ! & ! & nbsp Writeln(F, '@ECHO OFF')

& ! & ! & ! & nbsp Writeln(F, ' REM *** TFVWinZip par F Vicaria ***')
& ! & ! & ! & nbsp si UseFileList puis
& ! & ! & ! & ! & ! & nbsp Writeln(F, Commande ' '' ZipFileName
& ! & ! & ! & ! & ! & ! & ! & ! '' '' '@zipit.lst' ''')
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp Writeln(F, la Commande ' '' ZipFileName
& ! & ! & ! & ! & ! & ! & ! & ! '' '' nom de fichier ''')
& ! & ! & ! & nbsp Writeln(F, 'cd\')
& ! & ! & ! & nbsp Writeln(F, 'cls')
& nbsp & nbsp enfin
& ! & ! & ! & nbsp CloseFile(F)
& nbsp & nbsp fin
fin
le second est Le cœur de notre composant. La methode Execute (voir le Listing 3) va initier un processus distinct qui va executer le fichier de commandes, qui seront, a leur tour, appellent de WinZip ligne de commande. Cela permettra d'eviter toute sorte de dependance de la vitesse de la machine qui execute le programme. Pour ce faire, j'utilise les deux fonctions de l'API-CreateProcess et WaitForSingleObject (verifier l'API Windows fichier d'Aide pour plus de details sur la façon d'utiliser ces fonctions).
Listing 3. L'Execution de la routine.
procedure TFVWinZip.Executer
var
& nbsp & nbsp ProcessInfo: TProcessInformation
& nbsp & nbsp StartupInfo: TStartupInfo
& nbsp & nbsp Ferme: boolean
& nbsp & nbsp OldTime: TDateTime
begin
& nbsp & nbsp si Affecte(FOnExecute) puis FOnExecute(Auto)
& nbsp & nbsp essayer
& ! & ! & ! & nbsp { Chech UseFileList est definie ou si
& ! & ! & ! & ! & ! & nbsp nom de fichier ou un nom de fichier valide }
& ! & ! & ! & nbsp si UseFileList puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si la liste des Fichiers.Count= 0 then
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp MessageDlg('Pas de fichier a compresser!',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp mtError, [bakang], 0)
& ! & ! & ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & nbsp FileList.SaveToFile(ListName)
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp else
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si pas FileExists(nom de fichier) puis
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp MessageDlg(
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! 'Programme ne peut pas trouver le fichier a compresser!',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp mtError, [bakang], 0)
& ! & ! & ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp { Si ZipFileName est vide utiliser le nom de fichier
& ! & ! & ! & ! & ! & nbsp comme le nom par defaut }
& ! & ! & ! & nbsp si ZipFileName='
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si le nom de fichier<>'
& ! & ! & ! & ! & ! & ! & ! & nbsp ZipFileName:= ChangeFileExt(nom de fichier,'.zip')
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & nbsp ZipFileName:='Untitled.zip'
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp { Creer un fichier de commandes }
& ! & ! & ! & nbsp CreateCompressBat
& ! & ! & ! & nbsp { Preparer les parametres de la fenetre pour le processus }
& ! & ! & ! & nbsp FillChar(StartupInfo, SizeOf(TStartupInfo), 0)
& ! & ! & ! & nbsp avec StartupInfo ne
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp cb:= SizeOf(TStartupInfo)
& ! & ! & ! & ! & ! & nbsp dwFlags:= STARTF_USESHOWWINDOW
& ! & ! & ! & ! & ! & nbsp wShowWindow:= SW_MINIMIZE
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp { Executer le fichier de commandes comme des processus separes }
& ! & ! & ! & nbsp CreateProcess(PChar(fichier batch), nil, nil, nil,
& ! & ! & ! & ! & ! & nbsp Faux, NORMAL_PRIORITY_CLASS,
& ! & ! & ! & ! & ! & nbsp neant, de neant, StartupInfo, ProcessInfo)
& ! & ! & ! & nbsp { Attendre pour que le processus de finition ou de
& ! & ! & ! & ! & ! & nbsp annuler au bout de 10 secondes }
& ! & ! & ! & nbsp Ferme:= False
& ! & ! & ! & nbsp OldTime:= Maintenant
& ! & ! & ! & nbsp repeat
& ! & ! & ! & ! & ! & nbsp cas WaitForSingleObject(
& ! & ! & ! & ! & ! & ! & ! & nbsp ProcessInfo.hProcess, 100)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp WAIT_OBJECT_0 : Ferme:= True
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp WAIT_FAILED : RaiseLastWin32Error
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp Application.ProcessMessages
& ! & ! & ! & nbsp jusqu' (Ferme) ou (Maintenant>OldTime 10000)
& ! & ! & ! & nbsp { Supprimer le fichier de commandes }
& ! & ! & ! & nbsp DeleteFile(fichier batch)
& ! & ! & ! & nbsp si UseFileList puis
& ! & ! & ! & ! & ! & nbsp DeleteFile(ListName)
& nbsp & nbsp a l'exception de
& ! & ! & ! & nbsp MessageDlg(
& ! & ! & ! & ! & ! & nbsp Programme pourrait ne pas compresser le fichier!',
& ! & ! & ! & ! & ! & nbsp mtError, [bakang],0)
& nbsp & nbsp fin
fin
Apres l'execution du fichier de commandes et, par consequent, WinZip, la methode Execute va se debarrasser de tous a l'interieur sur les fichiers crees pour vous. Une fois le retour de la methode, tout ce que vous etes de gauche avec est le fichier Zip que vous avez cree ou vous avez extrait les fichiers.
Enfin
a l'Aide de votre objet ne pouvait pas etre plus facile: il suffit d'appeler la methode Execute apres la creation de l'objet et de definir certaines de ses proprietes avec les valeurs appropriees (voir l'exemple d'application inclus).
Pour executer ce composant, il suffit d'appeler la methode Execute apres avoir rempli les proprietes du composant avec les valeurs appropriees.
l'option La plus simple est de fournir le nom du fichier que vous souhaitez compresser (nom de fichier) et le nom du fichier Zip a creer(ZipFileName).
Note: Si vous souhaitez compresser plusieurs fichiers dans le meme fichier Zip, utilisez la liste de Fichiers liste de chaînes.
Le fichier d'Aide fourni avec la ligne de commande add-on pour WinZip vous donner plus d'idees sur la façon d'ameliorer ce composant et comment tirer pleinement parti de WinZip dans vos applications.
Un couple de mises en garde...
Vous aurez besoin pour vous assurer que les deux fichiers qui viennent avec le logiciel WinZip Ligne de Commande Add-on (WZZIP.EXE et WZUNZIP.EXE) sont dans votre chemin. Si ils ne le sont pas, vous aurez besoin de les deplacer dans votre repertoire systeme.
une Autre chose a retenir est que ces fichiers sont gratuit uniquement pour ceux qui ont achete WinZip et mis a niveau vers la version 7 ou ulterieure. A mon avis, ce qui peut a peine etre considere comme un inconvenient de nos jours. WinZip est devenu le standard de l'industrie utilitaire d'archivage pour l'environnement Windows, et il est tres difficile de trouver quelqu'un qui ne l'utilise pas.
Si vous avez des questions ou des commentaires, veuillez me les envoyer a l'adresse [email protected].
les Fichiers associes a cet article: vicaria.zip


Obtenir fonctionnalité de zip gratuit

Obtenir fonctionnalité de zip gratuit : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation