C# ile dosya kopyalama ve Multiselect dosya işlemleri


Bu basit uygulamada bir ve ya birden fazla dosya seçimi yapılarak kopyalama işleminin nasıl yapılacağını inceleyeceğiz. OpenFileDialogDialogResult, ListViewItem, ListView ve FileInfo gibi sınıfları bu örnekte kullandım. Asıl amacım dosya kopyalamanın nasıl yapılacağını anlatmaya çalışmak olsa da örneğin göze hoş gelmesi ve kullanılabilir olması da benim için önemli.

Dosya işlemi yapacağımız için uzay alanına

using System.IO;

ekliyoruz.

Aslında detayları zaten kodların içerisinde açıklama olarak belirttim ancak burada bir şey yazmaya gerek olduğunu düşünmüyorum.

Gözat butonuna tıkladığımızda neler olduğunu inceleyelim. OpenFileDialog sınıfı ile kullanıcıdan dosya seçmesini istiyoruz tek bir dosya seçebileceği gibi bir çok dosyada seçmesine imkan sağlıyoruz. Bunu OpenFileDialog sınıfının Multiselect özelliğini true olarak yapıyoruz.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace FileUploadSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnGozat_Click(object sender, EventArgs e)
        {
            try
            {

//Dosya seçebilmek ve kullanıcının işlem için onayı var mı öğrenebilmek için OpenFileDialog ve DialogResult sınıflarını tanımlıyoruz
                OpenFileDialog myFileDialog = new OpenFileDialog();
                DialogResult dr = new DialogResult();
                myFileDialog.Title = "Dosya ekle";

//OpenFileDialog ile açılan pencere default olarak C:\ sürücüsünü açacak
                myFileDialog.InitialDirectory = @"C:";

//Multiselect seçim yapabilmek için bu özelliği true olarak ayarlıyoruz
                myFileDialog.Multiselect = true;

                dr = myFileDialog.ShowDialog();

//Seçilen dosya isimlerini fileNames dizisinde saklıyoruz
                string[] fileNames = myFileDialog.FileNames;

//Dosya ve yolunun doğru olması gerektiğini true ile zorunlu tutuyoruz
                myFileDialog.CheckFileExists = true;
                myFileDialog.CheckPathExists = true;

//Yukarıda tanımladığımız DialogResult sonucunda OK dönmüşse yani kullanıcı Cancel deyip ya da X e basıp çıkmamışsa
                if (dr == DialogResult.OK)
                {

//Multiselect ile seçilen dosya isimlerini ve yollarını dosya isimli diziye atıp döngü ile ListViewItem e sırasıyla ekliyoruz
                    string[] dosya = fileNames;

                    for (int i = 0; i < fileNames.Length; i++)
                    {
                        ListViewItem li = new ListViewItem(dosya[i]);
                        ListView1.Items.Add(li);
                    }
                    label1.Text = dosya.Length.ToString()+" dosya eklendi.";
                }

//DialogResult sonucunda kullanıcı Cancel deyip ya da X e basıp çıkmamışsa buraya düşecek return ile uygulamadan çıkıcak yani aslında hiçbir şey olmamaış olacak
                else
                {
                    return;
                }
            }

//Yukarıdaki işlemler sırasında herhangi bir hata olmuşsa buraya düşecek
            catch (Exception)
            {

                return;
            }            

        }

Formun Loadın da ise seçilen dosyaların sürücü üzerinde yolunu gösteren Dosya yolu isimli bir sütun oluşturup boyutunu düzenliyoruz.

        private void Form1_Load(object sender, EventArgs e)
        {
            //Dosya yolu adında bir sütun oluşturuluyor
            ListView1.Columns.Add("Dosya yolu");
            ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }

Buraya kadar her şey tamamsa son olarak kopyalanması istediğimiz dosyaların kopyalama işlemini gerçekleştiriyoruz. Burada ben H:\ sürücü yolunu manuel olarak verdim ama isterseniz siz bunu dinamik olarak kullanıcıya seçtirebilirsiniz. Kaydet butonuna tıkladığında işlem tamamdır.

private void btnKaydet_Click(object sender, EventArgs e)
        {
            try
            {
                //ListView1 item adeti kadar dönen bir döngü açıp sırasıyla H:\ sürücüsüne FileInfo sınıfının CopyTo method u vasıtası ile kopyalanmasını sağlıyoruz
                int adet = ListView1.Items.Count;

                //ListView1.Items.Count 0 sa yani dosya eklenmemişse işleme devam ettirmiyoruz
                if (ListView1.Items.Count==0)
                {
                    MessageBox.Show("Dosya seçmelisiniz", "HATA!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                //dosya eklenmişse devam ediyoruz
                else
                {
                    for (int i = 0; i < adet; i++)
                    {
                        FileInfo fi = new FileInfo(ListView1.Items[i].SubItems[0].Text);
                        fi.CopyTo(@"H:\" + fi.Name);
                    }
                    MessageBox.Show("Dosyalar kopyalandı", "İşlem tamam!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

            }
            catch (Exception)
            {
                MessageBox.Show("Dosyalar kopyalanamadı", "HATA!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }           
        }

        private void btnTemizle_Click(object sender, EventArgs e)
        {
            ListView1.Items.Clear();
            label1.Text = String.Empty;
        }
    }

Uygulamanın ekran görüntüsü

filecopysample

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Faydalı olması dileğiyle…Uygulamanın tamamına buradan ulaşabilirsiniz.

Print Friendly, PDF & Email

2 responses on “C# ile dosya kopyalama ve Multiselect dosya işlemleri

  1. Way Selçuk Güral sende benim gibi uçmuşsun C# alemine,
    Bişey ararken eski arkadaşlara ulaşmak çok keyifli 🙂 birde aynı kulvarda koşup haberin olmuyosa 🙂

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir