1

Konu: commpress decompress

Arkadaşlar merhaba.
bir kaç tabloyu sıkıştırarak bir başka kulanıcıya göndermem onunda açarak bu tabloları kullanması gerekiyor. Winzip e falan bağlı kalmadan sıkıştırma ve açma işlemi için kullanabileceğim bir yöntem yada windows un kendi fonksiyonları varmı?
Teşekkürler.

2 Son düzenleyen, cetinbasoz (20.11.2006 18:16:23)

Re: commpress decompress

www.zlib.org'dan ucretsiz zlib.dll'i alabilirsin.
VFP kodunu ya kendin yaz ya da hazir VFP classini da ftp://leafe.com/tzip.zip ten al.

Not: Hazir olani alirsan bedava degil, freeware, lisans hikayesini oku. Ben hic kullanmadim onu, kendi kodum var.

3

Re: commpress decompress

addZIP tavsiye ederim. Hem DLL hemde ActiveX olarak kullanabilirsin. Örnek koduda sitesinde ve kurulumda yer alıyor.

4

Re: commpress decompress

cetinbasoz yazdı:

www.zlib.org'dan ucretsiz zlib.dll'i alabilirsin.
VFP kodunu ya kendin yaz ya da hazir VFP classini da ftp://leafe.com/tzip.zip ten al.

Not: Hazir olani alirsan bedava degil, freeware, lisans hikayesini oku. Ben hic kullanmadim onu, kendi kodum var.


ee freeware diyorsun. freeware beleş demek değil mi?

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

5

Re: commpress decompress

Degil ama yakin. Vermesen de hesabini sormam gibi birsey.

6

Re: commpress decompress

Çetin hocam sağol. Verdiğin link ve örnek sayesinde sanırım çözdüm

7 Son düzenleyen, metin (22.11.2006 15:33:57)

Re: commpress decompress

aslında benimki soru değildi:

http://www.freewarehof.org/fhof.html

freeware beleş demek. ancak bazı freeware yazılımcılar donate filan diyorlar. canın isterse beni dolarlarla donat gibi... smile kastettiğin bu heralde...

cetinbasoz yazdı:

Degil ama yakin. Vermesen de hesabini sormam gibi birsey.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

8

Re: commpress decompress

dz, tzip, zipit,zipmgr gibi fox dökümantasyonunda önerilen programlarda sıkıştırma oranı açısından istediğimi bulamadım.
ÇetinB. önerdiği şekilde kendi zip kodumu yazacak bilgim de yok.

Otomatik arşiv ve sigorta programıma çözüm olarak rar.exe programını VFP default drive altına kopyalayıp RUN (!) komutu ile dosyaları sıkıştırıp  kullanıyorum. (diğer çözümlerde 14 MB olan zip 4 MB oluyor) ve de iyi oldu.
örnek:
! RAR a C:\atenuygulamalar\atn.rar SYS(5)+SYS(2003)+"\irsdata\*.dbf" -r -m5 -dh -as -u -f -c- -ep

arkadaki anahtarlar arşivin sıkışma oranı, paylaşılan dosyaların açılması, sadece değişenlerin updati, ... vs vs....

SORUM:
1- Bu metodun dezavantajı var mı ? (Tek akıllının benim olmamam lazım)
2- ShellExecute metodu ile aynı (benzer) komutu çalıştırabilirmiyim ?

peşinen teşekkürler

VFP9 SP2

9 Son düzenleyen, ugurlu2001 (25.03.2008 17:06:28)

Re: commpress decompress

Kodu nerden bulduğumu hatırlamıyorum. Umarım işini görür.

Visual Fox Pro
* Azip procedure to zip files for Visual FoxPro using the

* AddZip AZIP32.DLL from shareware
* [url]http://ourworld.compuserve.com/homepages/Stephen_Darlington/addzip.htm[/url]
* Requirements: AZIP32.DLL in your Windows\system directory or current directory
*
* USAGE: AZIP(lInitialize, sArchive, sInclFiles[, ZipParams])
*
* Example: AZIP(.T., "ZIPFILE", "*.DBF *.TXT Customer.doc -FoxUser.*")
*
* DO NOT USE '|' AS FILE NAME SEPARATORS - USE ONLY SPACES ' '
*
* PARAMETERS:
*-- lInitialize: .T. first time & Done only once before or when starting file zip - .F. afterward
*-              Calling azip() with no params also initializes
*-- sArchive: Archive FileName with extension - Example "C:\THISFILE.ZIP"
*-- sInclFiles: String repr. file(s) to include, but excludes files with '-' in front.
*--        Example1 "D:\CUSTDATA.DBF"
*--     Example2 "C:\CUSTOMER.DBF D:\*.TXT D:\DATABASES\*.*" - only single spaces in between
*--     ZIPparams: Some compression parameters [Optional]
*                  e(x) x = 'X' maximum compression
*                       x = '0' no compression (digital 0 not O)
*                       x = 'S' minimal compression
*                       x = 'N' normal compression (default)
*                  P include directory entries
*                  & Span disks
*                  Spassword must be last part
*
* Return Values: the number of files archived or -1 if archive name not specified.
 
PARAMETERS lInitialize, sArchive, sInclFiles, ZIPparams
PRIVATE Params, sTemp
Params = PARAMETERS()
* declare needed DLL functions & pass current window
IF Params = 0 OR lInitialize
  PRIVATE HWND
  DECLARE INTEGER GetActiveWindow IN win32api
  HWND = GetActiveWindow()
 
  DECLARE addZIP_Initialise IN AZIP32
  DECLARE SHORT addZIP_SetParentWindowHandle IN AZIP32 SHORT HWindow
  DECLARE SHORT addZIP_ArchiveName IN AZIP32 STRING @ sArchName
  DECLARE SHORT addZIP_Include IN AZIP32 STRING @ sFileName
  DECLARE SHORT addZIP_Exclude IN AZIP32 STRING @ seFileName
  DECLARE SHORT addZIP_Recurse IN AZIP32 SHORT nRecurse
  DECLARE SHORT addZIP_SetCompressionLevel IN AZIP32 SHORT nComprLvl
  DECLARE SHORT addZIP_IncludeDirectoryEntries IN AZIP32 SHORT nInclDir
  DECLARE SHORT addZIP_IncludeEmptyDirectoryEntries IN AZIP32 SHORT nInclEDir
  DECLARE SHORT addZIP_Update IN AZIP32 SHORT nUpdate
  DECLARE SHORT addZIP_Span IN AZIP32 SHORT nSpan
  DECLARE INTEGER addZIP IN AZIP32
  DECLARE SHORT addZIP_Register IN AZIP32 STRING @ RegName, LONG RegNum
  DECLARE SHORT addZIP_Encrypt IN AZIP32 STRING @ sPassw
 
  addZIP_Initialise()
  addZIP_SetParentWindowHandle(HWND)
  *addZIP_Register("UBS, INC.", 600365060)
  addZIP_Register("UBS, INC.", 0x23C8D804)
  * Do above line if you have registered the software - it permits passwords
 
  IF Params < 2
    RETURN 0
  ENDIF
ENDIF
 
IF Params < 3
  ?? CHR(7)
  MESSAGEBOX('Missing parameters!',0, 'AZip Notice!')
  RETURN 0
ENDIF
 
IF Params > 3 AND !EMPTY(ZIPparams) && ZIPparams exist
  ZIPparams = ALLT(ZIPparams)
  PRIVATE LastPos, PASSWORD, nCurPos
  LastPos = LEN(ZIPparams) + 1
 
  * check for password
  nCurPos = ATC('S', ZIPparams)
  IF nCurPos > 0
    cPassWord = SUBSTR(ZIPparams, nCurPos+1)
    addZIP_Encrypt(cPassWord)
    ZIPparams = LEFT(ZIPparams, nCurPos -1) && now remove password part - it may have other code
  ENDIF
 
  * check for storing subdirectory information
  nCurPos = ATC('P', ZIPparams)
  IF nCurPos > 0
    addZIP_Recurse(1)
    *  addZIP_IncludeDirectoryEntries(1)
    * addZIP_IncludeEmptyDirectoryEntries(1)
  ELSE
    addZIP_Recurse(0)
    *   addZIP_IncludeDirectoryEntries(0)
 
  ENDIF
 
  * check for disk span
  nCurPos = ATC('&', ZIPparams)
  IF  nCurPos > 0
    *addZIP_SpanSizes(0, 0)
    addZIP_Span(1)
  ENDIF
 
  * check for compresion level
  nCurPos = ATC('E', ZIPparams)
  IF nCurPos > 0
    PRIVATE cCompLevel, nCompLevel
    cCompLevel = SUBSTR(ZIPparams, nCurPos + 1, 1)
    DO CASE
    CASE cCompLevel = 'X' && max compression
      nCompLevel = 3
    CASE cCompLevel = 'S' && min compression
      nCompLevel = 1
    CASE cCompLevel = '0' && no compression
      nCompLevel = 0
    OTHERWISE && normal/default compression
      nCompLevel = 2
    ENDCASE
    addZIP_SetCompressionLevel(nCompLevel)
  ENDIF
ELSE
  addZIP_SetCompressionLevel(2)
ENDIF
 
addZIP_ArchiveName(sArchive) && specify archive filepath
 
* separate include and exclude files
sInclFiles = ALLT(STRTRAN(sInclFiles, '   ', ' '))&& remove triple spaces
sInclFiles = ALLT(STRTRAN(sInclFiles, '  ', ' '))&& remove double spaces
TempS = ' ' + ALLT(sInclFiles) + ' '
sInclFiles = ''
sExclFiles = ''
WordCount = OCCURS(' ', TempS) - 1
FOR i = 1 TO WordCount
  TempS2 = SUBSTR(TempS, AT(' ', TempS, i) + 1, AT(' ', TempS, i + 1) - AT(' ', TempS, i) - 1)
  IF LEFT(TempS2, 1) = '-' && exclude file
    sExclFiles = sExclFiles + SUBSTR(TempS2, 2) + '|'
  ELSE && include file
    sInclFiles = sInclFiles + TempS2 + '|'
  ENDIF
ENDFOR
sInclFiles = IIF(RIGHT(sInclFiles, 1) = '|', LEFT(sInclFiles, LEN(sInclFiles) -1 ), sInclFiles)
addZIP_Include(sInclFiles) && (sInclFiles)
IF !EMPTY(sExclFiles)
  sExclFiles = IIF(RIGHT(sExclFiles, 1) = '|', LEFT(sExclFiles, LEN(sExclFiles) -1 ), sExclFiles)
  addZIP_Exclude(sExclFiles)
ENDIF
RETURN addZIP() && do it & return # of files compressed
 
DECLARE addZIP_Initialise IN AZIP32
DECLARE SHORT addZIP_SetParentWindowHandle IN AZIP32 SHORT @ HWindow
DECLARE SHORT addZIP_ArchiveName IN AZIP32 STRING @ sArchName
DECLARE SHORT addZIP_Include IN AZIP32 STRING @ sFileName
DECLARE SHORT addZIP_Exclude IN AZIP32 STRING @ seFileName
DECLARE SHORT addZIP_Recurse IN AZIP32 SHORT @ nRecurse
DECLARE SHORT addZIP_SetCompressionLevel IN AZIP32 SHORT @ nComprLvl
DECLARE SHORT addZIP_IncludeDirectoryEntries IN AZIP32 SHORT @ nInclDir
DECLARE SHORT addZIP_IncludeEmptyDirectoryEntries IN AZIP32 SHORT @ nInclEDir
DECLARE SHORT addZIP_Update IN AZIP32 SHORT @ nUpdate
*  DECLARE SHORT addZIP_SpanSizes IN AZIP32 LONG @ ulFirst, LONG @ ulOther
DECLARE SHORT addZIP_Span IN AZIP32 SHORT @ nSpan
DECLARE SHORT addZIP IN AZIP32
DECLARE SHORT addZIP_Register IN AZIP32 STRING @ RegName, LONG @ RegNum
DECLARE SHORT addZIP_Encrypt IN AZIP32 STRING @ sPassw
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

10 Son düzenleyen, ugurlu2001 (25.03.2008 17:07:41)

Re: commpress decompress

Visual Fox Pro
* Azip procedure to unzip files for Visual FoxPro using the

* AddZip AUNZIP.DLL's from shareware
* [url]http://ourworld.compuserve.com/homepages/Stephen_Darlington/addzip.htm[/url]
*
* Requirements: AUNZIP32.DLL in your Windows\system directory or current directory
*
* USAGE: AUNZIP(lInitialize, sArchive sDir[, sExtractFiles[, UnZIPparams]])
*
* PARAMETERS:
*-- lInitialize: .T. first time & Done only once beforeor when starting file zip - .F. afterward
*-              Calling azip() with no params also initializes
*-- sArchive: Archive FileName with extension - Example "C:\THISFILE.ZIP"
*-- sDir: destination directory string
*--        Example1 "D:\TEMP"
*-- sExtractFiles(optional): string repr. file(s) or types to extract
*--     Default is "*.*"
*--     Example1 "C:\CUSTOMER.DBF"
*--     Example2 "C:\CUSTOMER.DBF D:\*.TXT D:\DATABASES\*.*" - only single spaces in between
*-- UnZIPparams: Some compression parameters [Optional]
*                F freshen files - over older date/time or not existing
*                D include directory information
*                Overwrite: !!!!
*                   !!!! This does not seem to work except OverwriteNone - as of Aug. 1998 version.
*                        OA: overwrite all (default)
*                        O0: do not overwrite (letter O, digit 0)
*                        OU: ask user
*                Spassword (Must be last part - works only with registered version)
*
* Return Values: the number of files archived or -1 if archive name not specified.
 
PARAMETERS Initialize, sArchive, sDir, sExtractFiles, UnZIPparams
PRIVATE Params, sTemp
Params = PARAMETERS()
* declare needed DLL functions & pass current window
IF .T. &&Params = 0 OR Initialize
  PRIVATE HWND
  DECLARE INTEGER GetActiveWindow IN win32api
  HWND = GetActiveWindow()
 
  DECLARE LONG addUNZIP IN aunzip32.DLL
  DECLARE INTEGER addUNZIP_Abort IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_ArchiveName IN aunzip32.DLL STRING filename
  DECLARE INTEGER addUNZIP_Decrypt IN aunzip32.DLL STRING cPassword
  DECLARE INTEGER addUNZIP_DisplayComment IN aunzip32.DLL INTEGER bFlag
  DECLARE INTEGER addUNZIP_Exclude IN aunzip32.DLL STRING FILES
  DECLARE INTEGER addUNZIP_ExcludeListFile IN aunzip32.DLL STRING cFile
  DECLARE INTEGER addUNZIP_ExtractTo IN aunzip32.DLL STRING cPath
  DECLARE INTEGER addUNZIP_Freshen IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_GetLastError IN aunzip32.DLL
  DECLARE INTEGER addUNZIP_GetLastWarning IN aunzip32.DLL
  DECLARE INTEGER addUNZIP_Include IN aunzip32.DLL STRING FILES
  DECLARE INTEGER addUNZIP_IncludeListFile IN aunzip32.DLL STRING cFile
  DECLARE addUNZIP_Initialise IN aunzip32.DLL
  DECLARE INTEGER addUNZIP_InstallCallback IN aunzip32.DLL STRING funnc
  DECLARE INTEGER addUNZIP_Overwrite IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_Register IN aunzip32.DLL STRING cName, LONG lNumber
  DECLARE INTEGER addUNZIP_ResetDefaults IN aunzip32.DLL
  DECLARE INTEGER addUNZIP_RestoreAttributes IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_RestoreStructure IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_SetParentWindowHandle IN aunzip32.DLL LONG HWND
  DECLARE INTEGER addUNZIP_SetWindowHandle IN aunzip32.DLL LONG HWND
  DECLARE INTEGER addUNZIP_Test IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_ToMemory IN aunzip32.DLL STRING lpStr, LONG Uint32
  DECLARE INTEGER addUNZIP_Update IN aunzip32.DLL INTEGER iFlag
  DECLARE INTEGER addUNZIP_View IN aunzip32.DLL INTEGER bFlag
 
  addUNZIP_Initialise()
  addUNZIP_SetParentWindowHandle(HWND)
  addUNZIP_Register("UBS, INC.", 0x23C8D804)
 
  IF Params < 2
    RETURN 0
  ENDIF
ENDIF
 
IF Params < 3
  ?? CHR(7)
  MESSAGEBOX('Missing parameters!',0, 'AUNZip Notice!')
  RETURN 0
ENDIF
 
IF Params > 3 && UnZIPparams exist
  UnZIPparams = ALLT(UnZIPparams)
  PRIVATE LastPos, PASSWORD, nCurPos
  LastPos = LEN(UnZIPparams) + 1
 
  * check for password
  nCurPos = ATC('S', UnZIPparams)
  IF nCurPos > 0
    cPassWord = SUBSTR(UnZIPparams, nCurPos+1)
    addUNZIP_Decrypt(cPassWord)
    UnZIPparams = LEFT(UnZIPparams, nCurPos-1) && now remove password part - it may have other code
  ENDIF
 
  * check for restoring subdirectory information
  nCurPos = ATC('D', UnZIPparams)
  IF nCurPos > 0
    addUNZIP_RestoreStructure(1)
  ENDIF
 
  * check for freshen - update with newer files
  nCurPos = ATC('F', UnZIPparams)
  IF nCurPos > 0
    addUNZIP_Freshen(1)
  ELSE
    addUNZIP_Freshen(0)
  ENDIF
 
  * check for Overwrite - this does not seem to work except, OverwriteNone
  DO CASE
  CASE 'OA' $ UnZIPparams && Overwrite all
    addUNZIP_Overwrite(11)
  CASE 'O0' $ UnZIPparams && overwrite none
    addUNZIP_Overwrite(12)
  CASE 'OU' $ UnZIPparams && overwrite ask user
    addUNZIP_Overwrite(10)
  ENDCASE
 
  IF nCurPos > 0
    addUNZIP_RestoreStructure(1)
  ENDIF
 
ELSE
  addUNZIP_Overwrite(10)
ENDIF
 
addUNZIP_ArchiveName(sArchive)
addUNZIP_ExtractTo(ALLT(sDir))
sExtractFiles = IIF(Params<4, "*.*", ALLT(STRTRAN(sExtractFiles, ' ', '|'))) && file(s) to extract
addUNZIP_Include(sExtractFiles) && files to extract - *.txt, *.*, etc.
RETURN addUNZIP()
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

11

Re: commpress decompress

Hakikaten çok yararlı bir örnek olmuş üsdatlar,hepinizin ellerine sağlık..

En büyük sermaye nakit,nakit sermaye vakittir...

12

Re: commpress decompress

bu da xp sıkıştırma:

cFileZip = "C:\prg\xpzip\dene.ZIP"
cSource = "c:\prg\xpzip"
strtofile(chr(0x50)+chr(0x4B)+chr(0x05)+chr(0x06)+replicate(chr(0),18),cFileZip)
o=CREATEOBJECT("shell.application")
FOR EACH ofile IN o.NameSpace(cSource).items
   o.NameSpace(cFileZip).copyhere(ofile)
ENDFOR

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

13

Re: commpress decompress

Metin, Xp sıkıştırması dz, tzip, zipit,zipmgr lardan kötü sonuç veriyor, aynı dosyalarda performanslar aşağıda:
dz, tzip, zipit,zipmgr 14 MB
Xp 17 MB
rar -m5 anahtarlı 5 MB (m5 en iyi sıkıştırma, en yavaş)
uğurlunun metodunu daha deneyemedim

benim esas sorum ! RAR.exe ......  metodu hakkında olumsuz fikir var mı ?

VFP9 SP2

14

Re: commpress decompress

Konuka; madem ! RAR.exe diyorsun, WZZIP ve WZUNZIP ı da bir değelrlendirmelisin. Winzip in command line versiyonu olan bu komutlar ile 256 bit güvenli sıkıştırma dahi yapabiliyorsun. WinZip 10 ve sonrası gerekiyor.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

15

Re: commpress decompress

Sıkıştırma oranı açısından:
1. RAR
2. ARJ
3. ZIP (Standart zip. Yeni versiyondaki yeni seçenekler hariç)

Hız açısından sıralama ise bunun tamamen tersi.
Arj sıkıştırma oranı açısından RAR'a çok yakın fakat daha hızlı.
Hız sorunsa ARJ'ıda deneyebilirsin. Her üçününde hem dos hem windows versiyonları var ve hepsi paremetre ile kullanılabilir. 

DBF dosyalarının çok fazla sıkıştırılabilmesinin nedeni içinde çok fazla boşluk olması. Bu yüzden DBF'leri küçültmenin birbaşka yoluda CURSORTOXML,XMLTOCURSOR kullanarak boşluksuz XML olarak kaydetmek.

16

Re: commpress decompress

birol yazdı:

...
DBF dosyalarının çok fazla sıkıştırılabilmesinin nedeni içinde çok fazla boşluk olması. Bu yüzden DBF'leri küçültmenin birbaşka yoluda CURSORTOXML,XMLTOCURSOR kullanarak boşluksuz XML olarak kaydetmek.


xml olarak kaydetmek hem çok yavaş olur hem de xml dosyaları epeyce bir yer kaplıyor. eğer sıkıştırma program dışında birşey düşünürsen boşluksuz .text formatı xml ye göre çok daha iyi...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com