Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
AbZipper ile Sıkıştırma Süresi
#1
S.a Ben Uygulamamda 

String __fastcall TForm1::DOSYA_SIKISTIR(String KAYNAK, String HEDEF )
    {
      try{
             try{
            AbZipper1->BaseDirectory = KAYNAK;        
            AbZipper1->FileName= HEDEF;      
            AbZipper1->AddFiles("*.*",0);
            if(Form1->DEGISKEN->YedekSifrele==true)
                AbZipper1->Password = DEGISKEN->Arsiv_Parola;
            else
                AbZipper1->Password = "";
             }
             catch(Exception *HATA)
             {
            Form1->HATA->LISTELE("Dosya Sıkıştırma : "+HATA->Message);
                       return "Dosya Sıkıştırma : "+HATA->Message;
             }
        }
        __finally
        {
            AbZipper1->CompressionMethodToUse = smBestMethod;
            AbZipper1->Save();
            AbZipper1->CloseArchive();
        }
        return "Tamam";
    }



Fonksiyonum ile istediğim Klasörü Sıkıştırıyorum
Sonra 

UnicodeString __fastcall TForm1::DOSYABOYUTU(UnicodeString DOSYAADI)
    {
     UnicodeString ustrDOSYA_BOYUTU="";
      try{
           DWORD dosyaBoyutu = 0;
            HANDLE dosyaOkumaIslemi = CreateFile(DOSYAADI.w_str()  ,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
            dosyaBoyutu = GetFileSize(dosyaOkumaIslemi,NULL);
            CloseHandle(dosyaOkumaIslemi);
            ustrDOSYA_BOYUTU = dosyaBoyutu ;

           }
                  catch(Exception *HATA)
           {
           //Form1->HATA->LISTELE("Dosya Boyut Alma Hatası : "+HATA->Message);
           }
       return   ustrDOSYA_BOYUTU;
    }


Fonksiyon ile Boyutunu alıp Bulut Sunucuya Atıyorum

Ancak Farkettim ki 
Büyük Boyutlu Dosyaları Sıkıştırdığım Zaman Sanırım Dosya Sıkıştırmayı Cache te Yapıyor 
Sıkıştırma Bitmesine Ragmen Diske Yazma İşlemi Bitmemiş oluyor
ve BoyutAlma Fonksiyonu Çalışmaya Başlıyor
Dolayısıyla Sıkıştırılan Dosyanın Boyutunu Yanlış Almış oluyorum

AbZipper de Nasıl bir ayar yapmam gerekiyor ki
Dosya Sıkıştırma Fonksiyonum Sıkıştırılan Dosyayı Diske Yazana Kadar Çalışmaya Devam Etsin
Sleep Fonksiyonu işime yaramıyor çünkü ne kadar bekleyeceğimi bilmiyorum
Cevapla
#2
(16-09-2019, Saat: 19:26)theSinan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.S.a Ben Uygulamamda 

String __fastcall TForm1::DOSYA_SIKISTIR(String KAYNAK, String HEDEF )
    {
      try{
             try{
            AbZipper1->BaseDirectory = KAYNAK;        
            AbZipper1->FileName= HEDEF;      
            AbZipper1->AddFiles("*.*",0);
            if(Form1->DEGISKEN->YedekSifrele==true)
                AbZipper1->Password = DEGISKEN->Arsiv_Parola;
            else
                AbZipper1->Password = "";
             }
             catch(Exception *HATA)
             {
            Form1->HATA->LISTELE("Dosya Sıkıştırma : "+HATA->Message);
                       return "Dosya Sıkıştırma : "+HATA->Message;
             }
        }
        __finally
        {
            AbZipper1->CompressionMethodToUse = smBestMethod;
            AbZipper1->Save();
            AbZipper1->CloseArchive();
        }
        return "Tamam";
    }



Fonksiyonum ile istediğim Klasörü Sıkıştırıyorum
Sonra 

UnicodeString __fastcall TForm1::DOSYABOYUTU(UnicodeString DOSYAADI)
    {
     UnicodeString ustrDOSYA_BOYUTU="";
      try{
           DWORD dosyaBoyutu = 0;
            HANDLE dosyaOkumaIslemi = CreateFile(DOSYAADI.w_str()  ,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
            dosyaBoyutu = GetFileSize(dosyaOkumaIslemi,NULL);
            CloseHandle(dosyaOkumaIslemi);
            ustrDOSYA_BOYUTU = dosyaBoyutu ;

           }
                  catch(Exception *HATA)
           {
           //Form1->HATA->LISTELE("Dosya Boyut Alma Hatası : "+HATA->Message);
           }
       return   ustrDOSYA_BOYUTU;
    }


Fonksiyon ile Boyutunu alıp Bulut Sunucuya Atıyorum

Ancak Farkettim ki 
Büyük Boyutlu Dosyaları Sıkıştırdığım Zaman Sanırım Dosya Sıkıştırmayı Cache te Yapıyor 
Sıkıştırma Bitmesine Ragmen Diske Yazma İşlemi Bitmemiş oluyor
ve BoyutAlma Fonksiyonu Çalışmaya Başlıyor
Dolayısıyla Sıkıştırılan Dosyanın Boyutunu Yanlış Almış oluyorum

AbZipper de Nasıl bir ayar yapmam gerekiyor ki
Dosya Sıkıştırma Fonksiyonum Sıkıştırılan Dosyayı Diske Yazana Kadar Çalışmaya Devam Etsin
Sleep Fonksiyonu işime yaramıyor çünkü ne kadar bekleyeceğimi bilmiyorum

Öncelikle söylemeliyim ki; try/catch ve try/finally bloklarını hatalı kullanıyorsunuz. Sıkıştır metodunuzda bir hata olursa önce hata bloğuna ardından da finally bloğuna dallanılır. Yani kodunuzun yapısını biraz değiştirmelisiniz.

Ayrıca, ilgili sıkıştırma component'inin işini thread kullanarak yaptığını sanmıyorum. ABZipper component'inin kaynak kodları var ise elinizde, onlara bir bakabilirsiniz. Eğer thread kullanmıyor ise; ilk öncelik olarak WriteFile ile dosyaya yazdıktan sonra, yani tüm işlemler bittikten sonra Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. fonksiyonunu çağırmış mı bunu kontrol edebilirsiniz. Çağırmamış ise kendiniz ekleyebilirsiniz. Ya da, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. API'sini kullandığı yere gidip; FILE_FLAG_NO_BUFFERING flag'ını kullanıp kullanmadığını kontrol edebilirsiniz, kullanmamış ise ekleyebilirsiniz.

 Tüm bunlara rağmen hâla sıkıntı yaşıyorsanız; biraz daha detaylı bir test yapıp bizlerle durumu paylaşabilirsiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(17-09-2019, Saat: 09:08)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Öncelikle söylemeliyim ki; try/catch ve try/finally bloklarını hatalı kullanıyorsunuz. Sıkıştır metodunuzda bir hata olursa önce hata bloğuna ardından da finally bloğuna dallanılır. Yani kodunuzun yapısını biraz değiştirmelisiniz.

Ayrıca, ilgili sıkıştırma component'inin işini thread kullanarak yaptığını sanmıyorum. ABZipper component'inin kaynak kodları var ise elinizde, onlara bir bakabilirsiniz. Eğer thread kullanmıyor ise; ilk öncelik olarak WriteFile ile dosyaya yazdıktan sonra, yani tüm işlemler bittikten sonra Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. fonksiyonunu çağırmış mı bunu kontrol edebilirsiniz. Çağırmamış ise kendiniz ekleyebilirsiniz. Ya da, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. API'sini kullandığı yere gidip; FILE_FLAG_NO_BUFFERING flag'ını kullanıp kullanmadığını kontrol edebilirsiniz, kullanmamış ise ekleyebilirsiniz.

 Tüm bunlara rağmen hâla sıkıntı yaşıyorsanız; biraz daha detaylı bir test yapıp bizlerle durumu paylaşabilirsiniz.

Tuğrul Hocam


Kaynak Kodları var Ancak Ben Hangi Dosya ile Sıkıştırmaya Başladığını Bilmiyorum
Pascal ile Yazılmış Çözemedim


Ek Dosyalar Resimler
   
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Dosya sıkıştırma (ZLIB ile) esistem 12 5.912 27-09-2016, Saat: 09:39
Son Yorum: esistem



Konuyu Okuyanlar: 1 Ziyaretçi