¿Puedo crear una carpeta comprimida (comprimida) de Windows XP usando Delphi?Crear una carpeta comprimida (comprimida) usando Delphi
Respuesta
Según un hilo en eggheadcafe, puede usar CreateFile Function con FILE_FLAG_BACKUP_SEMANTICS
para crear una carpeta comprimida.
Para la ruta de extensiones de shell, consulte Using Windows XP "Compressed Folder" shell extension to work with .zip files por Namespace Edanmo, que está escrito en VB.
Acabo de encontrar la pregunta similar en C++. Eche un vistazo al Creating a ZIP file on Windows (XP/2003) in C/C++. Tengo la sensación de que la ruta más fácil es comprar ZipForge. Ver Zip a file in Delphi code sample.
Puede usar alguna versión de línea de comando de cualquier compresor como 7zip y realizar la tarea utilizando ShellExecute, o puede usar un componente comercial o gratuito como cualquiera de these.
He usado ZipMaster y se comporta muy bien para mi propósito. No sé cuáles son sus requisitos de tamaño, espacio y rendimiento.
Actualmente estoy usando también, se ajusta exactamente a mis necesidades. –
Puede usar TurboPower Abbrevia que ahora es de código abierto.
Tome un vistazo a estos:
Hace algún tiempo, he intentado todas las bibliotecas de compresión de Delphi que he podido encontrar, y eventualmente terminó usando KaZip por Kiril Antonov.
Mis requisitos eran:
- Libre;
- Código abierto;
- Código nativo de Delphi;
- Sin dependencias externas (dll, exe). Mi requisito más importante;
- Huella de memoria pequeña;
- Fácil de usar;
Lo uso principalmente para convertir archivos .kml en .kmz, y lo hace increíblemente rápido.
Aquí hay un ejemplo de cómo 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 qué objeto se aplica esa final "Gratis"? Mi suposición es KaZip, pero no tengo el representante para editar. – Argalatyr
Ah, sí KaZip debería liberarse allí ... Se arregló ... Limpié este código en el editor de texto de esta página para que sea un poco más fácil de leer ... Supongo que debería haber comprobado si todavía funciona :) –
A "cremallera" carpeta en Windows no es más que un archivo ZIP comprimido con cualquier biblioteca postal estándar. Las carpetas comprimidas son un animal diferente y requieren un formato de disco NTFS.
Para el archivo "Zip", sugiero fuertemente el Turbo Power Abbrevia, que es de código abierto y funciona bien. Es posible que desee comprobar este sitio alternate si usa Delphi 2009, ya que podría ser una copia más reciente.
Si desea utilizar la opción de carpetas comprimidas, deberá modificar los indicadores de directorio en el manejador de directorio.Esto solo afectará a los archivos NUEVOS agregados a ese directorio y no comprimirá automáticamente los archivos existentes. Si tiene un directorio existente que está intentando comprimir, cambie el nombre de cada archivo existente y cárguelo y guárdelo de nuevo en el nombre original, eliminando el archivo original cuando lo complete con cada uno. Yozey tenía un buen enlace a la documentación MSDN. Solo recuerda que esto solo funciona con discos formateados en NTFS, por lo que deberás agregar un cheque para eso en tu código.
Echa un vistazo a este OpenSource SynZip unit. Es incluso más rápido para la descompresión que la unidad predeterminada incluida con Delphi, y generará un exe más pequeño (las tablas crc se crean al inicio).
No se necesita dll externo. Funciona desde Delphi 6 hasta XE. No hay problema con la versión Unicode de Delphi. Todo en una sola unidad.
Acabo de realizar algunos cambios para manejar los nombres de archivo Unicode dentro del contenido Zip, no solo el juego de caracteres Win-Ansi, sino también cualquier carácter Unicode. Comentarios son bienvenidos.
¿Puedes dar un ejemplo para usar 'SynZip'? desde [ejemplo] (http://synopse.info/forum/viewtopic.php?pid=163) cómo comprimir una carpeta? – PresleyDias
Si está utilizando Delphi X2, sólo tiene que utilizar TZipFile de System.Zip:
Para comprimir una carpeta, utilice:
TZipFile.ZipDirectoryContents('ZipFile.zip', 'C:\Zip\this\right\now');
Para comprimir archivos, utilice:
Zip := TZipFile.Create;
try
Zip.Open('ZipFile.zip', zmWrite);
Zip.Add('FileToBeZipped.txt');
Zip.Add('ThisWillBeCompressedAgainForSureAndBecomeSmaller.zip');
finally
Zip.Free;
end
usando esto para comprimir una carpeta pero sigue apareciendo "El proceso no puede acceder al archivo porque está siendo utilizado por otro proceso. No estoy seguro de cómo se accede? Libero la lista que tenía con todos los iamges en la carpeta. Libere el archivo ini También estaba escribiendo. ¿Alguna forma de ver qué es acceder a ella? ¿O de cerrar de alguna manera lo que alguna vez accedió a ella? Gracias –
@GlenMorse Después de 3 años leí esta respuesta. Probablemente la primera función no funcione. el zip pero solo con el primer archivo, tal vez esa función se está bloqueando. Use el segundo enfoque, funciona bien –
funciona la primera versión. Solo tiene que salir de su camino. intente algo como TZipFile.ZipDirectoryContents ('.. \ ZipFile.zip', 'C: \ Zip \ this \ right \ now'); –
- 1. Crear una carpeta comprimida (o comprimida)
- 2. Creando una carpeta comprimida o comprimida en Windows usando Powershell o la línea de comando
- 3. almacenamiento de cadena comprimida
- 4. Representación gráfica comprimida?
- 5. Makefile para combinar archivos js y crear una versión comprimida
- 6. Descomprimir la respuesta http comprimida gzip
- 7. Identificar imagen DICOM comprimida por etiqueta
- 8. cómo detectar rápidamente si una cadena está comprimida zlib?
- 9. aumentar los conceptos básicos de la matriz comprimida
- 10. Decodificar página web comprimida recuperada mediante cURL en PHP
- 11. Obtención de información de una sola desde una imagen comprimida del núcleo
- 12. ¿Se puede rotar una imagen JPEG comprimida sin pérdida de calidad?
- 13. Uso de la salida comprimida de Sass dejando el encabezado de comentario del tema para Wordpress
- 14. ¿Cómo enumerar el contenido de una carpeta .zip en C#?
- 15. carpeta delphi get ruta
- 16. ¿Cómo crear una carpeta usando la plantilla .tt?
- 17. ¿Cómo crear una carpeta en Google Drive usando .NET API?
- 18. ¿Cómo puedo crear una nueva carpeta en asp.net usando C#?
- 19. ¿Cuál es la forma más común de crear un diálogo de selección de carpeta usando Delphi?
- 20. El texto de la descripción de la aplicación iTunes Connect no aceptará saltos de línea, descripción comprimida
- 21. ¿Cómo crear una nueva carpeta?
- 22. Cómo crear una carpeta/directorio
- 23. Crear una carpeta mediante s3cmd (Amazon S3)
- 24. Cómo hacer una carpeta oculta usando java
- 25. Delphi 2007 - ¿Cómo evitar tener una carpeta \ history?
- 26. ¿Cómo crear automáticamente una carpeta faltante?
- 27. Crear una carpeta existente en un repositorio
- 28. ¿Cómo crear una carpeta en Java?
- 29. crear una carpeta en sd con subcarpetas
- 30. ¿Cómo crear una carpeta vacía en java?
Lo "propiedad zip" ¿a qué se refiere? ¿Podrías ser un poco más específico? –
Avance rápido de 2 años a 2011: Delphi XE2 ahora viene con una clase TZipFile integrada en el RTL (ver System.Zip). Tal vez alguien que realmente lo usó podría publicar una respuesta al respecto aquí. –
Se agregó un ejemplo de Delphi XE2. –