Page 14 of 40
Posted: Tue Dec 12, 2006 7:40 pm
by AL90
gnozal wrote:
If you wish more control when using PureZIP, please use the PureZIP_Archive_* functions. Then you can decide what file to add or not, what error message display etc...
Ok I will read more over it in your Docs and test it.
gnozal wrote:
Probably not, because there is no ZLIB function for this. You have to unpack/repack the archive to do this.
Hmm I think its very complex because the Archive must complete
extracted in a Temporary Directory. Ok I will make some test with it
and see which solution is possible.
BTW:
I use AddFiles with wildcards because I want copy files direct in a specified
ZIP-Folder. e.g.
C:\MyFolder1_in_ZIP\MyFolder2_in_ZIP\MyFile.xyz
so I can add with AddFiles() e.g. as start with Folder2.
C:\MyFolder1_in_ZIP\*.*
so I become the required result I want.
ZIP:\MyFolder2_in_ZIP\MyFile.xyz
Therefore I requested for a optional
DestPath$ params because I think
its a better way as my example on top, but it is very sad
that it is not possible to create.

Posted: Wed Dec 13, 2006 10:07 am
by gnozal
AL90 wrote:Therefore I requested for a optional
DestPath$ params because I think its a better way as my example on top, but it is very sad that it is not possible to create.

I use ZLIB's zipOpenNewFileInZip() function.
zipOpenNewFileInZip() wrote:int ZEXPORT zipOpenNewFileInZip OF ((zipFile file, const char *filename, const zip_fileinfo *zipfi, const void *extrafield_local, uInt size_extrafield_local, const void *extrafield_global, uInt size_extrafield_global, const char *comment, int method, int level))
I don't see how to do what you ask : there is only the *filename, no optional DestPath$ parameter.
Posted: Wed Dec 13, 2006 8:08 pm
by AL90
gnozal wrote:I don't see how to do what you ask : there is only the *filename, no optional DestPath$ parameter.
Ok here an other example:
In my current project I have two File-Explorers:
e.g. Left =
"C:\Program Files" | Right =
"ZIP:\AnyFolder"
Now I want copy (Pack) Files from left to right.
for example I want copy a folder named
Test\ (available in
C:\Program Files\)
Now I create a TempDir with following name...
C:\Windows\Temp\MyOwnTempDir\AnyFolder\Test\
...and copy the contains from
C:\Program Files\Test\ to the TempDir on top.
Now I can add files to zip with the
C:\Windows\Temp\MyOwnTempDir\*.* wildcard
withit the subfolder
AnyFolder\ is also in ZIP-File. (as result so
ZIP:\AnyFolder\Test\)
What I mean is a DestPath$ param for IN-ZIP-FILE (Not for HD) Sorry when
I have not correct explained.

Posted: Thu Dec 14, 2006 8:48 am
by gnozal
AL90 wrote:...and copy the contains from C:\Program Files\Test\ to the TempDir on top.
Now I can add files to zip with the C:\Windows\Temp\MyOwnTempDir\*.* wildcard
withit the subfolder AnyFolder\ is also in ZIP-File. (as result so ZIP:\AnyFolder\Test\)
It should work if you use
#PureZIP_StorePathRelative, like this : PureZIP_AddFiles(MyZIP$, "C:\Windows\Temp\MyOwnTempDir\*.*", #PureZIP_StorePathRelative, #PureZIP_Recursive). The files will be added in the zip file in "AnyFolder\Test".
Posted: Thu Dec 14, 2006 9:39 pm
by AL90
gnozal wrote:
It should work if you use #PureZIP_StorePathRelative, like this : PureZIP_AddFiles(MyZIP$, "C:\Windows\Temp\MyOwnTempDir\*.*", #PureZIP_StorePathRelative, #PureZIP_Recursive). The files will be added in the zip file in "AnyFolder\Test".
Yes. This is my current way to do. But this all is not possible without Copy to Temp before AddFiles to zip
because the Folder
AnyFolder\ will not apply in ZIP:
Example:
an direct copy to ZIP with e.g. PureZIP_AddFiles(MyZIP$, "C:\Program Files\MyProg\*.*", #PureZIP_StorePathRelative, #PureZIP_Recursive)
will not apply the Folder
MyProg\ in zip. With
C:\Program Files\*.* it is possible but all
the other Files will also copied in zip. It is so no solution for me. Therefore my idea with an optional
path. But you mean it is not possible. ?!
Posted: Fri Dec 15, 2006 8:42 am
by gnozal
AL90 wrote:But you mean it is not possible. ?!
That's what I explained in my previous post :
gnozal wrote:I use ZLIB's zipOpenNewFileInZip() function.
zipOpenNewFileInZip() wrote:int ZEXPORT zipOpenNewFileInZip OF ((zipFile file, const char *filename, const zip_fileinfo *zipfi, const void *extrafield_local, uInt size_extrafield_local, const void *extrafield_global, uInt size_extrafield_global, const char *comment, int method, int level))
I don't see how to do what you ask : there is only the *filename, no optional DestPath$ parameter.
AFAIK, when adding a file to an archive, there is no optional parameter to do what you request in the ZLIB version I use.
Posted: Fri Dec 15, 2006 9:05 pm
by AL90
gnozal wrote:That's what I explained in my previous post :
Yes you right. Sorry! - Now I have no more questions.
I will now myself see what I can do and find some solutions.
Thanks for help.

Posted: Wed Jan 31, 2007 8:52 pm
by Thorsten1867
I have a small problem:
My ZIP file contains after compressing some 0 Byte files. I don't know why.
All files are OK, if I use this:
Code: Select all
PureZIP_AddFiles(PackDatei$, SourceDir$+"*.*", #PureZIP_StorePathRelative, #PureZIP_RecursiveZeroDirs)
The ZIP contains some 0 Byte Files, if I use this:
Code: Select all
If PureZIP_Archive_Create(PackDatei$, #APPEND_STATUS_CREATE)
PureZIP_Archive_Compress(SourceDir$+"readme.rtf", #True)
; .....
PureZIP_Archive_Close()
Posted: Thu Feb 01, 2007 8:41 am
by gnozal
Thorsten1867 wrote:I have a small problem:
My ZIP file contains after compressing some 0 Byte files. I don't know why.
About 0 byte files and #PureZIP_RecursiveZeroDirs, have a look at this post :
http://www.purebasic.fr/english/viewtop ... &start=185
Thorsten1867 wrote:The ZIP contains some 0 Byte Files, if I use this:
Code: Select all
If PureZIP_Archive_Create(PackDatei$, #APPEND_STATUS_CREATE)
PureZIP_Archive_Compress(SourceDir$+"readme.rtf", #True)
; .....
PureZIP_Archive_Close()
You mean the packed 'readme.rtf' has 0 bytes length in archive ?
Posted: Thu Feb 01, 2007 1:01 pm
by Thorsten1867
gnozal wrote:You mean the packed 'readme.rtf' has 0 bytes length in archive ?
Yes. Some files have after compressing 0 Byte, other files are compressed correct.
Posted: Thu Feb 01, 2007 1:41 pm
by gnozal
Thorsten1867 wrote:gnozal wrote:You mean the packed 'readme.rtf' has 0 bytes length in archive ?
Yes. Some files have after compressing 0 Byte, other files are compressed correct.
Could you post a link to this rtf file (or any other file wich is compressed to zero length) ?
Do you compile in ANSI or UNICODE mode ?
Posted: Thu Feb 01, 2007 1:58 pm
by Thorsten1867
Posted: Thu Feb 01, 2007 2:20 pm
by gnozal
I have installed your files.
My test program (compressing some files with zero length in your zip) :
Code: Select all
If PureZIP_Archive_Create("c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP", #APPEND_STATUS_CREATE)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\License.rtf", #False)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\CallURL.exe", #False)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\CheckPC.exe", #False)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\DemoVersion.exe", #False)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\PlayMusic.exe", #False)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\ShowHTML.exe", #False)
PureZIP_Archive_Close()
EndIf
If PureZIP_Archive_Create("c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP", #APPEND_STATUS_CREATE)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\License.rtf", #True)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\CallURL.exe", #True)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\CheckPC.exe", #True)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\DemoVersion.exe", #True)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\PlayMusic.exe", #True)
Debug PureZIP_Archive_Compress("c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\ShowHTML.exe", #True)
PureZIP_Archive_Close()
EndIf
TEST1.ZIP
Code: Select all
c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP\CallURL.exe 6 656 11/11/2006 00:45 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP\CheckPC.exe 6 656 11/11/2006 00:46 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP\DemoVersion.exe 7 168 11/11/2006 16:32 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP\License.rtf 1 319 13/11/2006 17:10 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP\PlayMusic.exe 10 752 11/11/2006 00:46 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST1.ZIP\ShowHTML.exe 12 800 11/11/2006 00:46 ----
TEST2.ZIP
Code: Select all
c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP\c:\PureBasic400\Program\PureZIP-Problem\EasySetup\License.rtf 1 319 13/11/2006 17:10 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP\c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\CallURL.exe 6 656 11/11/2006 00:45 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP\c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\CheckPC.exe 6 656 11/11/2006 00:46 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP\c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\DemoVersion.exe 7 168 11/11/2006 16:32 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP\c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\PlayMusic.exe 10 752 11/11/2006 00:46 ----
c:\PureBasic400\Program\PureZIP-Problem\TEST2.ZIP\c:\PureBasic400\Program\PureZIP-Problem\EasySetup\InstProgs\ShowHTML.exe 12 800 11/11/2006 00:46 ----
No problem here !
Using PB4.02 (and all beta libs) + PureZIP 1.70
Maybe you could post the code you are using ?
EDIT : Install.exe and Uninstall.exe are crashing at exit under WinNT4.
Posted: Thu Feb 01, 2007 2:28 pm
by Thorsten1867
Code: Select all
Procedure Add2ZIP(Path.s, SrcPart.s, exclude.s)
Protected dir.l, entry.s, copy.b, exts.b
If Not Right(Path, 1) = "\" : Path+"\" : EndIf
If Not Right(SrcPart, 1) = "\" : SrcPart+"\" : EndIf
exts = CountString(exclude,"|")
dir = ExamineDirectory(#PB_Any, Path, "")
If dir
While NextDirectoryEntry(dir)
entry = DirectoryEntryName(dir)
If entry = "." Or entry = ".."
Continue
ElseIf DirectoryEntryType(dir) = #PB_DirectoryEntry_File
If exclude ;{ don't write files with extension
copy = #True
For i = 1 To exts
If GetExtensionPart(entry) = StringField(exclude,i,"|")
copy = #False
Break
EndIf
Next
EndIf ;}
If copy
PureZIP_Archive_Compress(RemoveString(Path+entry, SrcPart), #True)
Debug "ZIP: "+RemoveString(Path+entry, SrcPart)+" ("+Str(FileSize(Path+entry))+")"
EndIf
Else
Add2ZIP(Path+entry+"\", SrcPart, exclude)
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
nocopy$="ini|cfg|"
If PureZIP_Archive_Create(PackDatei$, #APPEND_STATUS_CREATE)
Add2ZIP(SourceDir$, SourceDir$, nocopy$)
PureZIP_Archive_Close()
EndIf
Posted: Thu Feb 01, 2007 2:44 pm
by gnozal
No problem with PureZIP !
There is a bug in your code. If you use a path relative to a base directory, you need to set the base directory with SetCurrentDirectory_().
So it works :
Code: Select all
Procedure Add2ZIP(Path.s, SrcPart.s, exclude.s)
Protected dir.l, entry.s, copy.b, exts.b
If Not Right(Path, 1) = "\" : Path+"\" : EndIf
If Not Right(SrcPart, 1) = "\" : SrcPart+"\" : EndIf
exts = CountString(exclude,"|")
dir = ExamineDirectory(#PB_Any, Path, "")
If dir
While NextDirectoryEntry(dir)
entry = DirectoryEntryName(dir)
If entry = "." Or entry = ".."
Continue
ElseIf DirectoryEntryType(dir) = #PB_DirectoryEntry_File
If exclude ;{ don't write files with extension
copy = #True
For i = 1 To exts
If GetExtensionPart(entry) = StringField(exclude,i,"|")
copy = #False
Break
EndIf
Next
EndIf ;}
If copy
PureZIP_Archive_Compress(RemoveString(Path+entry, SrcPart), #True)
Debug "ZIP: "+RemoveString(Path+entry, SrcPart)+" ("+Str(FileSize(Path+entry))+")"
EndIf
Else
Add2ZIP(Path+entry+"\", SrcPart, exclude)
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
nocopy$="ini|cfg|"
PackDatei$ = "c:\PureBasic400\Program\PureZIP-Problem\TEST3.ZIP"
SourceDir$ = "c:\PureBasic400\Program\PureZIP-Problem\EasySetup\"
; /////////// SET BASE DIRECTORY ////////////////
SetCurrentDirectory_(@SourceDir$)
; ///////////////////////////////////////////////
If PureZIP_Archive_Create(PackDatei$, #APPEND_STATUS_CREATE)
Add2ZIP(SourceDir$, SourceDir$, nocopy$)
PureZIP_Archive_Close()
EndIf