1

Konu: c# ile ftp işlemleri

Benim foxpro da bir ihtiyacım oldu bundan dolayı ftp işlemleri yazmaya başladım(c sharp da)
alttaki kodlar c# da yazılmıştır. Sadece foxpro, klasik vb gibi dillerin içinden kullanılabilir .
Daha çok yeni, biraz daha geliştirdim. İçinde hata kontrollerini falan yok şu anda .
çalışması için programı derleyip dll i register etmek gerekir.
regasm ftpfoxdll.dll  /codebase    şeklide register edilir.  isteyen olursa project olarak gönderebilirim

foxpro içinden çalışması için  notlar.

* değişkenlerin açıklaması
ftpadres="ftp://ftp.abccom.w04.acbd.com/"  && şeklinde olmalı
kullaniciadi="KULLANICIADI" && küçük harf buyuk harf duyarlı
sifre="11111"
karsidosyaadi="abc.DAT"    && herhangi bir dosya adı olabilir  x.exe , a.xml  şeklinde
localdizin="c:\\"    && dizin adı   c:\\altdizin\\diziniki\\    şeklinde olmalı ( c# böyle istiyor)

localtxtdosyaadi="ftpdekidosya.txt"  && local makinene dosyaadlari.txt biçiminde bir txt dosyası kayıt edecek bunun içinde
                                     &&  ftp deki tüm dizinler ve tüm dosyaların adları sıra ile  var daha sonra xml yapılabilir.   

o = Createobject("ftpfoxdll.Class1")
sonuc=o.ftpdendosyacek(ftpadres, kullaniciadi, sifre, karsidosyaadi, localdizin )

o = Createobject("ftpfoxdll.Class1")
sonuc=o.ftpdendosyasil(ftpadres, kullaniciadi, sifre, karsidosyaadi )

o = Createobject("ftpfoxdll.Class1")
sonuc=o.ftpdosyaisimleri(ftpadres, kullaniciadi, sifre, localtxtdosyaadi , localdizin)

şeklinde kullanılır


**** c#  kodu

C#
using System;

using System.Runtime.InteropServices; // fox için gerekli
using System.Net;
using System.IO;
 
namespace ftpfoxdll
{
    [ClassInterface(ClassInterfaceType.AutoDual)]  // foxpro için  gerekli
    [ProgId("ftpfoxdll.Class1")]                   // foxpro için  gerekli
    [ComVisible(true)]                             // foxpro için  gerekli
 
    public class Class1
    {
 
        public string ftpdendosyacek(string ftpadres, string kullaniciadi, string sifre, string karsidosyaadi, string localdizin)
        {
            string dosyaninadi;
            dosyaninadi = ftpadres.Trim() + karsidosyaadi.Trim();
 
            FtpWebRequest ftpbaglan = (FtpWebRequest)WebRequest.Create(dosyaninadi);
            ftpbaglan.Credentials = new NetworkCredential(kullaniciadi.Trim(), sifre.Trim());
 
            using (FtpWebResponse islem = (FtpWebResponse)ftpbaglan.GetResponse())
            {
                Stream data = islem.GetResponseStream();
                string localkayitdosyasi = localdizin.Trim() + "/" + karsidosyaadi.Trim();
 
                if (File.Exists(localkayitdosyasi))
                   { File.Delete(localkayitdosyasi); }  //  Local makinede bu dosyadan varsa sil   
 
                byte[] byteBuffer = new byte[4096];
 
                using (FileStream output = new FileStream(localkayitdosyasi, FileMode.CreateNew))
                {
                    int bytesRead = 0;
                    do
                    {
                        bytesRead = data.Read(byteBuffer, 0, byteBuffer.Length);
                        if (bytesRead > 0)
                                 { output.Write(byteBuffer, 0, bytesRead); }
                    }
                    while (bytesRead > 0);
                }
            }
 
            string sonuc;
            sonuc = "ok";
            return sonuc;
        }
 
        public string ftpdendosyasil(string ftpadres, string kullaniciadi, string sifre, string karsidosyaadi)
        {
            string dosyaninadi;
            dosyaninadi = ftpadres.Trim() + karsidosyaadi.Trim();   // dosyanın ftp deki tam adresi
            try
            {
                FtpWebRequest ftpbaglan = (FtpWebRequest)FtpWebRequest.Create(new Uri(dosyaninadi));
                ftpbaglan.Credentials = new NetworkCredential(kullaniciadi.Trim(), sifre.Trim());
                ftpbaglan.UseBinary = true;
                ftpbaglan.Method = WebRequestMethods.Ftp.DeleteFile;
                FtpWebResponse response = (FtpWebResponse)ftpbaglan.GetResponse();
              //  Response.Write(response.StatusDescription);   asp.net den kalma
                return "ok";
            }
            catch (Exception ex)
            { return ex.Message.ToString(); }
            // hata kodları burada http://msdn.microsoft.com/tr-tr/library/aa383887.aspx
        }
 
        public string ftpdosyaisimleri(string ftpadres, string kullaniciadi, string sifre, string localtxtdosyaadi, string localdizin)
        {   // ftp den aldığım dosya adlarını bir txt dosyasına yazıyorum  alttaki localdosyaadi isimli değişken
            string localdosyaadi;
            localdosyaadi = localdizin.Trim() + "\\" + localtxtdosyaadi.Trim();
            try
            {
                FtpWebRequest ftpbaglan = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpadres.Trim()));
                ftpbaglan.UseBinary = true;
                ftpbaglan.Credentials = new NetworkCredential(kullaniciadi.Trim(), sifre.Trim());   // kullanıcı adı ve şifresi             
                ftpbaglan.Method = WebRequestMethods.Ftp.ListDirectory;
                WebResponse islem = ftpbaglan.GetResponse();
                StreamReader reader = new StreamReader(islem.GetResponseStream());
                string okunan = reader.ReadLine();
                StreamWriter dosya = new StreamWriter(localdosyaadi);
                while (okunan != null)
                {
                    dosya.WriteLine(okunan);    // text dosyasına tek tek ftp deki dosya adlarını yaz !( dizinlerle birlikte )
                    okunan = reader.ReadLine();  // sonrakini oku
                }
                dosya.Close();
                reader.Close();
                islem.Close();
                return "ok";
            }
            catch (Exception ex)
            { return ex.Message.ToString(); }
        }
    }
}

2

Re: c# ile ftp işlemleri

Sağol..
Ben kendim c# ile yazdım düzgün çalışıyor. Fox un içinden kullanıyorum.
Aslında foxdan c# kullanmadan da da yapılabilir bu işlemler ama ben birazda öğrenmek niyetiyle yazdım