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
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(); }
}
}
}