Ne zaman dosya sıkıştırmaya ihtiyaç duyarsınız
CANIAS projelerinde ZIPFILE/UNZIPFILE komutlarıyla en sık karşılaştığım iki senaryo var: bir raporun onlarca ekini tek dosyada toplayıp e-posta ile göndermek, ve bir entegrasyon dosyasını (örneğin toplu XML/CSV aktarımı) sıkıştırılmış halde bir FTP sunucusuna yüklemek. TROIA bu işi harici bir kütüphaneye ihtiyaç duymadan, iki komutla hallediyor.
ZIPFILE ve UNZIPFILE sözdizimi
Sıkıştırma:
ZIPFILE {dosyayolu} INTO {hedefzipdosyasi};
Birden fazla dosyayı tek seferde sıkıştırmak için yollar | karakteriyle birleştiriliyor: 'C:\TMP\rapor1.pdf|C:\TMP\rapor2.pdf'.
Açma:
UNZIPFILE {zipdosyayolu} INTO {hedefklasor};
Gerçek bir örnek: aylık raporları paketleyip FTP'ye yollamak
/* Bir klasördeki tüm raporları sıkıştırıp arşiv adıyla FTP'ye yükler. */
LOCAL:
STRING KAYNAKLIST;
STRING ZIPYOLU;
TABLE DOSYALAR(ADI CHAR(200));
FILELIST '*C:\TMP\raporlar' TO DOSYALAR;
IF RETURNVALUE = 'notexist' THEN
MESSAGE 'Kaynak klasör bulunamadı.' TYPE ERROR;
RETURN;
ENDIF;
LOOP AT DOSYALAR;
IF KAYNAKLIST = '' THEN
KAYNAKLIST = '*C:\TMP\raporlar\' + DOSYALAR.ADI;
ELSE
KAYNAKLIST = KAYNAKLIST + '|' + '*C:\TMP\raporlar\' + DOSYALAR.ADI;
ENDIF;
ENDLOOP;
ZIPYOLU = '*C:\TMP\raporlar_' + SYS_DATE8 + '.zip';
ZIPFILE KAYNAKLIST INTO ZIPYOLU;
Pratik notlar ve tuzaklar
- Yol öneki
*unutulursa istemci/sunucu karışıklığı olur.FILELIST,ZIPFILEgibi komutlarda*ile başlayan yollar istemci makinesindeki dosyayı işaret eder; önek yoksa sunucu tarafındaki bir yol aranır. Server'da hiç var olmayan bir dosya için "dosya bulunamadı" hatası aldığınızda ilk kontrol edilecek şey genelde bu önektir. - Boş klasörü sıkıştırmaya çalışmak sessizce başarısız olabilir —
ZIPFILEçağrısından önceFILELISTile en az bir dosya olduğunu doğrulamak, üretimde "boş zip dosyası" şikayetlerini önler. - UNZIPFILE hedef klasörü otomatik oluşturmaz — hedef klasörün önceden var olduğundan emin olun, aksi halde açma işlemi sessizce ya da hata ile başarısız olabilir; bu yüzden
UNZIPFILEçağrısından önce klasörün varlığınıFILEEXISTSbenzeri bir kontrolle doğrulamak iyi bir alışkanlık. - Büyük dosyalarda sıkıştırma application server'ın CPU'sunu kullanır — bu işlem istemci tarafında değil sunucuda çalıştığı için, çok sayıda kullanıcı aynı anda büyük arşivler oluşturuyorsa sunucu performansını gözlemlemek gerekir; toplu/batch işler için mümkünse gece saatlerine planlanmış bir transaction tercih edin.
Sıradaki adım
Bir sonraki yazıda aynı dosya komutları ailesinden COPYFILE ve FILELIST ile dosya kopyalama/listeleme senaryolarına, ardından OPEN FILE/PUT/GET ile satır satır dosya okuma-yazmaya değineceğim.
Yorumlar (0)
Yorum Yaz