Resumen:
Estoy teniendo problemas para obtener la biblioteca de compresión JCL para abrir cualquier archivo distribuido. Presenta el error "(0000001) Función incorrecta" como se define en borlands "windows.pas";
scenerios
Un solo archivo comprimido usando el ejemplo de compresión JCL.
-Se descomprimirá tanto en el ejemplo JCL como en el gui 7zip.
Un archivo distribuido sobre 7 archivos comprimidos usando el ejemplo de compresión JCL.
- Descomprimirás solo en el gui 7zip. No puede descomprimir usando el ejemplo JCL.
Un solo archivo comprimido usando el 7zip gui.
-Se descomprimirá tanto en el ejemplo JCL como en el gui 7zip.
Un archivo distribuido comprimido en 7 archivos utilizando la interfaz gráfica de 7zip.
- Descomprimirás solo en el gui 7zip. No puede descomprimir utilizando JCL
Información extra
La demostración de compresión JCL es la que se incluye con la biblioteca JCL.
JCL: 2.2.1.3970
7zip dll: 9.20.0.0 y 9.65.0.0
Ejemplo de nombre de archivo en conjunto de archivos distribuidos: "Test Archive.7z.002"
Probado con compresión tanto .tar como .7z
Se utilizaron diferentes tamaños de archivo. 2048 bytes y 2048KB
Delphi 2009.
Este es el código que estoy usando. Es a partir de la demo de compresión JCL. Se produce un error en la línea "TJclDecompressArchive (FArchive) .ListFiles".
procedure TFormMain.ActionOpenROExecute(Sender: TObject);
var
ArchiveFileName, Password: string;
AFormat: TJclDecompressArchiveClass;
SplitArchive: Boolean;
begin
if OpenDialogArchiveRO.Execute then
begin
CloseArchive;
ArchiveFileName := OpenDialogArchiveRO.FileName;
SplitArchive := AnsiSameText(ExtractFileExt(ArchiveFileName), ".001");
if SplitArchive then
ArchiveFileName := ChangeFileExt(ArchiveFileName, "");
AFormat := GetArchiveFormats.FindDecompressFormat(ArchiveFileName);
if AFormat <> nil then
begin
if SplitArchive then
ArchiveFileName := ArchiveFileName + ".%.3d";
InputQuery("Archive password", "Value", Password);
FArchive := AFormat.Create(ArchiveFileName, 0, SplitArchive);
FArchive.Password := Password;
FArchive.OnProgress := ArchiveProgress;
if FArchive is TJclDecompressArchive then
TJclDecompressArchive(FArchive).ListFiles
else
if FArchive is TJclUpdateArchive then
TJclUpdateArchive(FArchive).ListFiles;
ListView1.Items.BeginUpdate;
try
while ListView1.Items.Count < FArchive.ItemCount do
ListView1.Items.Add;
finally
ListView1.Items.EndUpdate;
end;
end
else
ShowMessage("not a supported format");
end;
end;
El ejemplo de JCL sabe sobre los archivos y los abre. (formato zip usado en la imagen. Mismo problema).
¿Tal vez alguien ha encontrado esto antes?
¿Alguien puede apuntarme en la dirección correcta por favor?
Gracias por tu tiempo.
Scott M.
Respuestas
2 para la respuesta № 1Este error existe en Project JEDI - Issue Tracker.
http://issuetracker.delphi-jedi.org/bug_view_advanced_page.php?bug_id=5137
Dos posibles soluciones
- Actualice su instalación JCL a última construcción diaria
Comenta la siguiente línea en
JclCompression.pas
aprocedure TJclSevenzipDecompressArchive.OpenArchive;
y reconstruir los paquetes.// ¡Comenta esta línea!
SevenzipCheck (InArchive.Open (AInStream, @MaxCheckStartPosition, OpenCallback));