none
c# Tek Tek dosya sıkıştırmak RRS feed

  • Genel Tartışma

  • Merhaba arkadaşlar

    yedekleme programım için yedekleme yapmaya çalışıyorum. sorun yok yapıyor aşağıdaki kodla ama ben şu şekilde klasör içindeki dosyaları tek tek nasıl sıkıştırabilirim.

    mesala ;

    klasör A / içiden

    A.XLS 

    B.XLS 

    C.XLS 

    D.XLS 

    bunları ;

    A.rar

    B.rar

    C.rar 

    D.rar

       try
                {
    
                    using (var zip = new ZipFile())
                    {
                                         
                       
                        zip.AddFiles(Directory.GetFiles(textBox4.Text), "packed");
                        zip.Save(textBox5.Text + DateTime.Now.ToString("dd MMMM yyyy dddd") + ".zip");  
                      
                    }
                    MessageBox.Show("Dosya Sıkıştırıldı...........");
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + " " + ex.InnerException);
                }

     

    20 Ekim 2018 Cumartesi 14:25

Tüm Yanıtlar

  • Bu işi Windows'un Shell32 kitaplığına yaptırabilirsiniz.

            private void CreateZipFile(string Fullpath)
            {
                using (FileStream fs = File.Create(Fullpath))
                {
                    byte[] emptyzip = new byte[] { 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
                    fs.Write(emptyzip, 0, emptyzip.Length);
                    fs.Flush();
                    fs.Close();
                }
            }
    
            private void Zip(string folder, string zipFolder)
            {
                if (!Directory.Exists(zipFolder))
                    Directory.CreateDirectory(zipFolder);
                string zipPath;
                Shell shell = new Shell();
                shell.NameSpace(folder).Items().Cast<FolderItem>().Where(fi => !fi.IsFolder).ToList().ForEach(fi =>
                {
                    zipPath = Path.Combine(zipFolder, $"{fi.Name}_{DateTime.Now:yyyyMMdd_HHmmss}.zip");
                    CreateZipFile(zipPath);
                    shell.NameSpace(zipPath).CopyHere(fi);
                    Thread.Sleep(1000);
                });
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Zip("D:\\Dosyalarim", "D:\\Yedek");
            }
    


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    22 Ekim 2018 Pazartesi 12:26
  • teşekkür ederim üstat


    22 Ekim 2018 Pazartesi 18:48
  • mustafa bey;

    kod sorunsuz işliyor fakat şu mümkünmüdür?

    yedek alırken 10 dosya olsa tek tek sıkıştırırken ekran görünüyor penceler bunu gizleme yada arkada planda

    çalıştırmak mümkünmü? 

    23 Ekim 2018 Salı 18:52
  • CopyHere metodunun ikinci bir parametre alan bir yapısı daha var. Dialog pencerelerini engellemek için 4 degerini vermeniz yeterli. Yani,

    shell.NameSpace(zipPath).CopyHere(fi);

    yerine,

    shell.NameSpace(zipPath).CopyHere(fi, 4);
    yazmanız yeterli.


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    23 Ekim 2018 Salı 21:40