Makale Özeti

Bu makalemizde FTP(File Transfer Protocol) işlemlerinden söz edeceğiz. Makalede bahsedeceğimiz bazı işlemlere örnek verecek olursak “Dosya Yükleme, Dosya İndirme, Dosya Silme, Klasör Silme, Dosya Listeleme” gibi konulara değineceğiz.

Makale

Bu makalemizde FTP(File Transfer Protocol) işlemlerinden söz edeceğiz. Makalede bahsedeceğimiz bazı işlemlere örnek verecek olursak “Dosya Yükleme, Dosya İndirme, Dosya Silme, Klasör Silme, Dosya Listeleme” gibi konulara değineceğiz.

Öncelikle FTP’den biraz bahsedelim. FTP, File Transfer Protocol yani Türkçesi “Dosya Transfer Protokolü” dediğimiz ASCII, EBCDIC, ve Binary bir uç aygıttan diğerine iletim için kullanılır.

Öncelikle System.Net.FtpWebRequest sınıfından söz edelim. Makalemizde söz edeceğimiz tüm işlemleri bu sınıf üzerinden gerçekleştireceğiz ve System.IO ile dosya bilgilerini almak için bu sınıfı kullanacağız.

FtpWebRequest ‘in detaylı olarak Method ve Property ’lerinden bahsetmeyeceğim, örnekler içerisinde zaten her satırın açıklamalarını yapıyorum, sırasıyla hangi methodun ve özelliğin ne işe yaradığını görmüş olacağız!

 
FTP ile Dosya Gönderme 

// Dosya bilgisini oluşturuyoruz, Dosya yolunu web için FileUplaod nesnesinden, win32 Applicationlar için OpenFileDialog nesnesinden alabilirsiniz.
FileInfo FI = new FileInfo(“DosyaYolu”);
// Dosyanın gönderileceği ftp yolunu belirliyoruz
string uri = "ftp://ServerIP-yada-FtpDomain/" + FI.Name;
// Ftp işlemlerini yapacağımız classımızı tanımlıyoruz
FtpWebRequest FTP;
// Oluşturduğumuz değişkene hedef yolumuzu eşitliyoruz
FTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
// Ftp bağlantısı için UserName ve Şifremizi belirtiyoruz
FTP.Credentials = new NetworkCredential("UserName", "Şifre");
// Default olarak true geliyor false 'a çeviriyoruz. Amacımız bağlantı açıksa hataya düşmemesi
FTP.KeepAlive = false;
// Bu kısımda hangi işlemi yapacağımızı belirtiyoruz, dosya göndereceğimiz için UploadFile methodunu seçiyoruz
FTP.Method = WebRequestMethods.Ftp.UploadFile;
// Dosya tranferinin Binary türden yapılacağını belirtiyoruz
FTP.UseBinary = true;
// Gönderdiğimiz dosyanın boyutunu belirtiyoruz
FTP.ContentLength = FI.Length;
// Buffer büyüklüğünü 2KB olarak belirtiyoruz ve değişkenimizi tanımlıoyruz
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// Bu kısımda dosyayı binary'e çevirip ftp'ye gönderiyoruz
FileStream FS = FI.OpenRead();
try
{
    Stream strm = FTP.GetRequestStream();
    contentLen = FS.Read(buff, 0, buffLength);
    while (contentLen != 0)
    {
        strm.Write(buff, 0, contentLen);
        contentLen = FS.Read(buff, 0, buffLength);
    }
    strm.Close();
    FS.Close();
    MessageBox.Show("Dosya Gönderildi!", "Hata");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Hata");
}
 

 
FTP ile Dosya İndirme

FtpWebRequest FTP;
try
{
    // Kendi PC'mizde oluşturacağımız dosyanın yolunu tanımlıyoruz
    FileStream SR = new FileStream("C:\\" + "DosyaAdi", FileMode.Create);
    // Dosyanın alınacağı ftp yolunu belirliyoruz
    FTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://ServerIP-yada-FtpDomain/" + “DosyaAdı”);
    // Ftp bağlantısı için UserName ve Şifremizi belirtiyoruz
    FTP.Credentials = new NetworkCredential("UserName", "Şifre");
    // Bu kısımda hangi işlemi yapacağımızı belirtiyoruz, dosya göndereceğimiz için UploadFile methodunu seçiyoruz
    FTP.Method = WebRequestMethods.Ftp.DownloadFile;
    // Dosya tranferinin Binary türden yapılacağını belirtiyoruz
    FTP.UseBinary = true;
    // Dosya transfer bilgilerini FtpWebResponse türüne çeviriyoruz               
    FtpWebResponse response = (FtpWebResponse)FTP.GetResponse();
    // Çevirdiğimiz bilgileri kendi PC'miz için dosya oluşturacak Stream'e eşitliyoruz
    Stream ftpStream = response.GetResponseStream();
    // Dosya boyutunu belirtiyoruz
    long cl = response.ContentLength;
    // Buffer büyüklüğünü 2KB olarak belirtiyoruz ve değişkenimizi tanımlıoyruz
    int bufferSize = 2048;
    int readCount;
    // Bu kısımda dosyayı binary'e çevirip ftp'den çekiyoruz
    byte[] buffer = new byte[bufferSize];
    readCount = ftpStream.Read(buffer, 0, bufferSize);
    while (readCount > 0)
    {
        SR.Write(buffer, 0, readCount);
        readCount = ftpStream.Read(buffer, 0, bufferSize);
    }
    ftpStream.Close();
    SR.Close();
    response.Close();
    MessageBox.Show("Dosya İndirildi!");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message,"Hata");
}
 


FTP ile Dosya Listesi

string[] DosyaListesi;
StringBuilder result = new StringBuilder();
FtpWebRequest FTP;
try
{
    // Dosyaların listeleneceği ftp yolunu belirliyoruz
    FTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftp://ServerIP-yada-FtpDomain/));
    // Dosya tranferinin Binary türden yapılacağını belirtiyoruz
    FTP.UseBinary = true;
    // Ftp bağlantısı için UserName ve Şifremizi belirtiyoruz
    FTP.Credentials = new NetworkCredential("ewlak_test", "asdasd");
    // Bu kısımda hangi işlemi yapacağımızı belirtiyoruz
    FTP.Method = WebRequestMethods.Ftp.ListDirectory;
    // Dosya listesini alıyoruz
    WebResponse response = FTP.GetResponse();
    // Aldığımız listeyi StreamReader ile her satırını okuyup dosya isimlerini ayırıyoruz
    StreamReader reader = new StreamReader(response.GetResponseStream());
    string line = reader.ReadLine();
    while (line != null)
    {
        result.Append(line);
        result.Append("\n");
        line = reader.ReadLine();
    }
    result.Remove(result.ToString().LastIndexOf('\n'), 1);
    reader.Close();
    response.Close();
    DosyaListesi = result.ToString().Split('\n');
    for (int x = 0; x < downloadFiles.Length; x++) 
    {
        // ve son olarak istediğimiz bir nesneye ekliyoruz. Aşağıda örnek olarak ListBox!a eklenmiştir.
        lbListe.Items.Add(DosyaListesi[x].ToString());
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Hata");
}

  Devamı “FTP ile Dosya ve Klasör İşlemleri – 2” makalemizde…

  Gökhan BAĞCI
 
Microsoft Certified Professional