Posso creare una cartella compressa (con cerniera) di Windows XP usando Delphi?Creazione della cartella compressa (con cerniera) usando Delphi
risposta
In base a una discussione in eggheadcafe, è possibile utilizzare CreateFile Function con FILE_FLAG_BACKUP_SEMANTICS
per creare una cartella compressa.
Per il percorso delle estensioni della shell, dai un'occhiata a Using Windows XP "Compressed Folder" shell extension to work with .zip files di Namespace Edanmo, che è scritto in VB.
Ho appena trovato la domanda simile posta su C++. Dai un'occhiata a Creating a ZIP file on Windows (XP/2003) in C/C++. Ho la sensazione che il percorso più semplice sia acquistare ZipForge. Vedi Zip a file in Delphi code sample.
È possibile utilizzare una versione da riga di comando di qualsiasi compressore come 7zip ed eseguire l'attività utilizzando ShellExecute oppure è possibile utilizzare un componente gratuito o commerciale come chiunque di these.
Avevo utilizzato ZipMaster e si comporta molto bene per il mio scopo. Non so quali siano le dimensioni, lo spazio e le prestazioni richieste.
Attualmente sto usando anche questo, si adatta perfettamente alle mie esigenze. –
È possibile utilizzare TurboPower Abbrevia che ora è open source.
Date un'occhiata a questi:
Qualche tempo fa, ho provato tutte le librerie di compressione Delphi che ho potuto trovare, e alla fine ho finito utilizzando KaZip entro il Kiril Antonov.
miei requisiti erano:
- gratuito;
- Open source;
- codice Delphi nativo;
- Nessuna dipendenza esterna (dll, exe). Il mio requisito più importante;
- Ingombro di memoria ridotto;
- Facile da usare;
Io lo uso principalmente per trasformare file .kml in .kmz, e lo fa incredibilmente veloce.
Ecco un esempio di come lo uso:
uses
KaZip;
...
// replaces a .kml file with a .kmz file
procedure KmlToKmz(const aFileName: string);
var
FS: TFileStream;
KaZip:TKaZip;
KmzFileName:TFileName;
begin
KmzFileName := ChangeFileExt(aFileName, '.kmz');
KaZip := TKaZip.Create(nil);
try
// create an empty zipfile with .kmz extension:
FS := TFileStream.Create(KmzFileName, fmOpenReadWrite or FmCreate);
try
KaZip.CreateZip(FS);
finally
FS.Free;
end;
KaZip.Open(KmzFileName); // Open the new .kmz zipfile
KaZip.Entries.AddFile(aFileName); // add the .kml
KaZip.Close;
DeleteFile(aFileName); // delete the .kml
finally
KaZip.Free;
end;
end;
a quale oggetto si applica l'ultimo "libero"? La mia ipotesi è KaZip, ma non ho il rep per modificare. – Argalatyr
Ah, sì KaZip dovrebbe essere liberato lì .. Risolto .. Ho pulito questo codice nell'editor di testo di questa pagina per renderlo un po 'più facile da leggere .. Credo che avrei dovuto controllare se funziona ancora :) –
A "zip" cartella in Windows non è altro che un file .ZIP compresso utilizzando qualsiasi libreria zip standard. Le cartelle compresse sono un animale diverso e richiedono un formato disco NTFS.
Per il file "Zip", suggerisco caldamente lo Turbo Power Abbrevia, che è open source e funziona bene. Potresti voler controllare questo sito alternate se utilizzi Delphi 2009 in quanto potrebbe essere una copia più recente.
Se si desidera utilizzare l'opzione cartelle compresse, sarà necessario modificare i flag di directory sull'handle della directory.Ciò avrà un impatto solo sui nuovi file aggiunti a quella directory e non comprimerà automaticamente i file esistenti. Se si dispone di una directory esistente che si sta tentando di comprimere, rinominare ciascun file esistente e caricarlo e salvarlo sul nome originale eliminando il file originale quando è completo con ciascuno di essi. Yozey aveva un buon collegamento con la documentazione di MSDN. Ricorda solo che funziona solo con dischi formattati NTFS, quindi dovrai aggiungere un controllo per quello nel tuo codice.
Dai un'occhiata a questo OpenSource SynZip unit. È ancora più veloce per la decompressione rispetto all'unità predefinita fornita con Delphi e genererà un exe più piccolo (le tabelle crc vengono create all'avvio).
Non è necessaria alcuna DLL esterna. Funziona da Delphi 6 fino a XE. Nessun problema con la versione Unicode di Delphi. Tutto in una singola unità.
Ho appena apportato alcune modifiche per gestire i nomi dei file Unicode all'interno del contenuto Zip, non solo il set di caratteri di Win-Ansi ma tutti i caratteri Unicode. Il feedback è benvenuto
puoi dare un esempio per usare 'SynZip'? da [esempio] (http://synopse.info/forum/viewtopic.php?pid=163) come comprimere una cartella? – PresleyDias
Se si utilizza Delphi X2, basta usare TZipFile da System.Zip:
a zip in una cartella, utilizzare:
TZipFile.ZipDirectoryContents('ZipFile.zip', 'C:\Zip\this\right\now');
zip file, uso:
Zip := TZipFile.Create;
try
Zip.Open('ZipFile.zip', zmWrite);
Zip.Add('FileToBeZipped.txt');
Zip.Add('ThisWillBeCompressedAgainForSureAndBecomeSmaller.zip');
finally
Zip.Free;
end
utilizza questo per comprimere una cartella ma continua a ottenere "Il processo non può accedere al file perché è stato utilizzato da un altro processo, non è sicuro in che modo si accede? Ho liberato la lista che avevo con tutti gli iamges nella cartella. Stavo scrivendo anche io. C'è un modo per vedere che cosa sta accedendo ad esso? o un modo per chiudere ciò che mai accederà ..? grazie –
@GlenMorse Dopo 3 anni ho letto questo anser.La prima funzione probabilmente non funziona. lo zip ma solo con il primo file, forse quella funzione si sta bloccando.Si usa il secondo, funziona bene –
la prima versione funziona. Devi solo uscire dal tuo modo. provare qualcosa come TZipFile.ZipDirectoryContents ('.. \ ZipFile.zip', 'C: \ Zip \ this \ right \ now'); –
- 1. cartella compressa/archivio usando lo script php
- 2. Creazione di una cartella compressa/compressa in Windows utilizzando Powershell o la riga di comando
- 3. mysql compressa() con sqlalchemy
- 4. grep -f sul file in una cartella compressa
- 5. creazione della cartella nella memoria interna
- 6. Creazione di applicazioni Delphi multipiattaforma
- 7. stepping in cerniera con obiettivo `to`
- 8. Delphi 7 ottiene il nome della cartella dal percorso
- 9. Get My Documents percorso della cartella in Delphi
- 10. Modifica asse di articolazione della cerniera tramite script in Unity
- 11. Come ottenere il percorso della cartella dalla cartella nota GUID in Delphi
- 12. Pulizia della cartella con PowerShell
- 13. Delphi: ridenominazione di una cartella non valida
- 14. LINQ "cerniera" in String Array
- 15. Creazione della cartella .ebextensions in aws beanstalk elastico
- 16. Scala bomba? (come una bomba a cerniera)
- 17. Creazione cartella temporanea in java
- 18. cambiamento della cartella dist default con setuptools
- 19. Caricamento file compressa HTML?
- 20. Creazione modulo Delphi senza congelamento filo principale
- 21. delphi - Creazione di frame personalizzati con nuovo evento
- 22. Strana cartella "locale" all'interno della cartella virtualenv
- 23. Creazione dell'hash per la cartella
- 24. Nessuna cartella "apk" generata all'interno della cartella "Build" durante la creazione di un APK
- 25. Come ottenere il percorso della cartella usando l'elettrone
- 26. Come rimuovere il nome della cartella da url usando .htaccess
- 27. implementazione Haskell di "cerniera" strano errore
- 28. Maven che crea un assemblaggio con cerniera piatta
- 29. Delphi XE2/FireMonkey Creazione e-mail
- 30. Creazione classe virtuale/distruzione in delphi
Cosa "Proprietà zip" ti riferisci a? potresti essere un po 'più specifico? –
Avanzamento rapido 2 anni fino al 2011: Delphi XE2 ora viene fornito con una classe TZipFile integrata nell'RTL (vedere System.Zip). Forse qualcuno che ha effettivamente usato potrebbe pubblicare una risposta al riguardo qui. –
Aggiunto un esempio Delphi XE2. –