FTP Part II - Download

by Volem November 01, 2011 10:01

Yazimin ikinci kismiyla tekrar merhaba.. Ilk bolumde verilen bir ftp klasoru altindaki dosyalarin listesini aliyorduk. Bu yazimda ise herhangi bir dosyayi ya da butun klasoru nasil download edebiliriz konusunu islemeye calisacagim. Download folder icin bir onceki yazimda yer alan GetFileList metodunu kullanacagiz. Neyse sozu fazla uzatmadan biraz kod gorelim.

 

 

public static void Download(string file, string remoteDirectory, string destinationDirectory, string host, string user, string password)
{
    try
    {
        string uri = "ftp://" + host + "/" + remoteDirectory + "/" + file;
        Uri serverUri = new Uri(uri);
        if (serverUri.Scheme != Uri.UriSchemeFtp)
        {
            return;
        }
        FtpWebRequest reqFTP;
        reqFTP = (FtpWebRequest)FtpWebRequest.Create(serverUri);
        reqFTP.Credentials = new NetworkCredential(user, password);
        reqFTP.KeepAlive = false;
        reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
        reqFTP.UseBinary = true;
        reqFTP.Proxy = null;
        reqFTP.UsePassive = false;
        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
        Stream responseStream = response.GetResponseStream();
        CreateDirectory(destinationDirectory);
        FileStream writeStream = new FileStream(destinationDirectory + "\\" + file, FileMode.Create);
        int Length = 2048;
        Byte[] buffer = new Byte[Length];
        int bytesRead = responseStream.Read(buffer, 0, Length);
        while (bytesRead > 0)
        {
            writeStream.Write(buffer, 0, bytesRead);
            bytesRead = responseStream.Read(buffer, 0, Length);
        }
        writeStream.Close();
        response.Close();
    }
    catch (WebException wEx)
    {
        throw wEx;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Gordugunuz gibi GetFileList'de yaptigimiza benzer bir is yapiyoruz yalniz bu sefer Method olarak;

reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

kullaniyoruz. Bu kod bize klasor adresini bildigimiz herhangi bir dosyayi istedigimiz klasore indirmemizi sagliyor. Tahmin ettiginiz gibi Download folder'da yazdigimiz 2 metodu yani GetFileList ve Download'u kullanacak.

public static void DownloadFolder(string sourceDirectory, string destinationDirectory, string host, string user, string password)
{
    try
    {
        string[] files = GetFileList(sourceDirectory, host, user, password);
        foreach (string file in files)
        {
            Download(file, sourceDirectory, destinationDirectory, host, user, password);
        }
    }
    catch(Exception ex)
    {
        throw ex;
    }
}

Umarim acik olmustur. 

Tags: , , , ,

Yazılım | C#

FTP Part I - Dosya Listesi

by Volem October 25, 2011 09:56

 

Merhabalar,

Bugun yeniden 3 asamali bir yazi yazmaya karar verdim. Beraber FTP islemlerini C# ile nasil gerceklestirebilecegimizi gorecegiz. 

Ilk bolumde verilen bir FTP klasorundeki dosya listesini nasil aliriz ona bakacagiz. Ardindan da Download, Upload ve Delete islemlerini nasil yapacagimizi gostermeye calisacagim.


Methodlarin bireysel olarak calisabilmesi icin hepsine FTP server adi, kullanici adi ve sifre bilgilerini parametre olarak gonderiyorum. Ancak siz dilerseniz bu yapiyi bu metodlari gercekleyen sinifin ozellikleri olarak tanimlayabilirsiniz. Boylece sadece o metodu ilgilendiren parametreler ona gidecektir vs.. vs.. :)

Bu bolumde anlatacagim bir klasordeki dosya listesini okuma aslinda diger metodlar ve kullanimlar icin temel olusturacaktir. Sozu fazla uzatmadan kod yazmaya basliyalim..

public static string[] GetFileList(string sourceFolder, string host, string user, string password) {
    StringBuilder result = new StringBuilder();
    WebResponse response = null;
    StreamReader reader = null;
    try
    {
        FtpWebRequest reqFTP;
        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + host + "/" + sourceFolder + "/"));
        reqFTP.UseBinary = true;
        reqFTP.Credentials = new NetworkCredential(user, password);
        reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
        reqFTP.Proxy = null;
        reqFTP.KeepAlive = false;
        reqFTP.UsePassive = false;
        response = reqFTP.GetResponse();
        reader = new StreamReader(response.GetResponseStream());
        string line = reader.ReadLine();
        while (line != null)
        {
            result.Append(line);
            result.Append("\n");
            line = reader.ReadLine();
        }
        if (result.ToString() != String.Empty)
        {
            result.Remove(result.ToString().LastIndexOf('\n'), 1);
            return result.ToString().Split('\n');
        }
        return new string[0];
    }
    catch (Exception ex)
    {
        if (reader != null)
        {
            reader.Close();
        }
        if (response != null)
        {
            response.Close();
        }
        throw ex;
    }
}

Aslinda yukaridaki kod kendini anlatiyor ancak dikkat edilmesi gereken satir;

reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

Bu kod parcacigi aslinda ftp sunucusuna gosterdigimiz klasorde en temel command'i olan "dir" calistirmasini soyluyor. Bu komut bize satir satir o klasorde var olan ne varsa listeleyecektir biz de bu satirlari okuyoruz hepsi bu. Bu metodun eksigi aslinda bu klasordekilerin dosya mi yoksa klasor mu olup olmadigini kontrol etmemesidir. Bu konuyu merak eden arkadaslar icin ListDirectory yerine ListDirectoryDetails kullanimini arastirmalarini tavsiye ederim. Kodu basit tutmak amaciyla bu konuya girmiyorum.

Umarim isinize yarar.. Yazimin 2. bolumuyle tekrar gorusmek uzere..

Tags: , , , ,

Yazılım | C#

Email Helper

by Volem October 24, 2011 15:44

public class EmailHelper
{
    const char emailSplitter = ',';    
    public static void Email(string toAddress, string fromAddress, string subject, string attachmentFile, string smtphost, int port)
    {
        string[] emails = toAddress.Split(new char[] { emailSplitter }, StringSplitOptions.RemoveEmptyEntries);
        if (emails.Length > 1)
        {
            foreach (var email in emails)
            {
                Email(email.Trim(), fromAddress, subject, attachmentFile, smtphost, port);
                Thread.Sleep(1000);
            }
            return;
        }
        MailMessage message = new MailMessage();
        message.To.Add(new MailAddress(toAddress));
        message.Subject = subject;
        message.From = new MailAddress(fromAddress);
        message.Body = subject;
        if (File.Exists(attachmentFile))
        {
            message.Attachments.Add(new Attachment(attachmentFile));
        }
        SmtpClient smtp = new SmtpClient(smtphost, port);
        smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
        smtp.Send(message);
    }
}
Merhabalar, 
Uzun zamandan sonra yine arsive katmam gereken bir post cikti :) Herhalde bu yukaridaki kodu 10-15 kere tekrar tekrar yazmisimdir. Yaptigi is aslinda koddan da anlasilacagi uzere cok basit. Bir SMTP server (host) kullanarak parametreleri ile belirttiginiz maili olusturup atiyor. Eger mailinizde attachment yoksa o parametreyi bos gecebilrisiniz.Ayrica toAddress parametresine ',' ile ayrilmis mail adresleri koyabilirsiniz. Boylece birden cok kisiye mail atacaktir.

Herkese kolay gelsin.

Tags: , ,

Yazılım | C#

Code First Migration Preview

by Volem June 14, 2011 12:57

Tags: , , ,

Uygulama | Yazılım

Teknik Dünya vs İş Dünyası

by Volem April 18, 2011 10:42

Herkese tekrar merhabalar,

İş dunyasinin olaylara bakisinin teknik adamlardan farki hakkinda daha once de cok tecrube etmis ve okumustum. Ancak son zamanlarda isin business tarafiyla cok daha icli disli olmaya basladiktan sonra konu hakkinda biraz daha sahsi gorusum olustu.

Eger benim gibi teknik alt yapidan geliyorsaniz, herhangi bir seyi patronunuza ya da musterinize anlatirken sececeginiz kelime ve kaliplara dikkat etmelisiniz. Sebep, sizin kullanacaginiz teknik tanimdaki bir kalip is dunyasinda baska bir anlama gelebiliyor. Ornegin, service derken ben windows service, web service veya deamon(linux)'dan bahsediyorumdur, ancak business icin service verilen ya da verilecek olan hizmet anlamina geliyor.. Bu basit bir karmasiklik fakat daha vahim yanlis anlasilmalara sebep olabilir secilen kelimeler...

Hitap ettiginiz kisinin alt yapisini biliyor olsaniz ve sizi anlayacagini dusunseniz de, o kisi yandaki sekilde gordugunuz gibi piyonlardan biriyse aslinda onun anlamasi icin degil onun ustlerinin anlamasi icin bir sunum ya da dokuman hazirlmalisiniz.

Bunun disinda eger sizi (teknik kisileri) dinlemelerini istiyorsaniz basit ama net cumleler secmelisiniz. Ornegin, yaziliminiz bir sekilde e-mail ile bilgilendirme yapmasi gerekiyorsa.. "the application shall email the customer after they have placed an order" seklinde bir tabir business tarafi icin yeterli olacaktir. Ancak sizin takiminizin bu kodu yazmasi icin asla yetmez. Teknik ekibe "we need to implement a module that checks the state of the order and if it is a valid order, send an e-mail using our e-mailing module to the specified roles related to that order after order has been successfully saved" seklinde bir anlatima ihtiyac duyacaksiniz. Ikinci soyledigimi bir CEO'ya soylerseniz, siz daha cumlenizi bitiremeden sizi kesecek ve aslinda sizin ona anlatmaniza gerek olmayan bir suru soru ile karsilasacaksiniz.. ya da daha kotusu sizi zaten anlamayacak ve dinlemeyecektir.

Ucuncu bir tavsiyem ise business'a laftan cok resim gosterin ve resim uzerinden anlatim yapin.. Cunku bir word dokumanindaki business istekleri ve fonksiyonel yapi bizim icin cok daha faydali olsa da, business sadece kus bakisi goruntuyu gorerek olayi kavramayi ister.

Herkese kolay gelsin...

 

 

Tags: , , ,

Hayat | Yazılım

Data Modelleyici

by Volem April 16, 2011 11:58

Bu aralar profesyonel kullanim amaciyla veritabani modelleme araci bakiyorum. Genel olarak aradigim reverse engineering yapabilmeli, alter ve creation scriptleri generate edebilmeli + genel gecer veritabanlari icin destegi olmali.. Toad Data Modeller opsiyonlardan biri, bir digeri ise Sybase Power Designer ancak iki opsiyon da fiyat olarak pahali geldi. Bana onerebileceginiz free bir tool varsa mutesekkir olurum. Toad Data Modeller 25 entity (table) 'a kadar ucretsiz destek veriyor ancak bu yetmiyor gercek dunyada.

Tags:

Yazılım | SQL

.NET Developer

by Volem March 18, 2011 14:41

Position

Software Developer 

Required Qualifications

Knowledge 

• Knowledge of database architecture and design
• Knowledge of ASP.Net, C#
• Knowledge of Ms SQL, Ajax, Html, Css
• Knowledge of software development
• New and emerging technologies
• English
 
Competences
 
• Team player
• Problem Solving skills
• Analytical minded
• Result driven
• Responsibility
• Technical understanding
• Flexible
 
Experience
 
• Minimum 3 years software development experience.
 
Education
 
• University degree in Computer Science or related area.

Location

Istanbul/Turkey

Tags: ,

Hayat | Yazılım | C# | Web

Versiyon Kontrol Sistemi Nedir?

by Volem March 14, 2011 10:49

Merhabalar,

Bu konu hakkinda bir yazi yazacagim aklima gelmezdi, cunku nedense kafamda her developer bir sekilde bu sistemlerle asinadir ve neyi nasil yapacagini biliyordur diye bi izlenim olusmus. Gecen hafta yeni bir proje grubuna baslarken yeni gelen arkadaslarin boyle sistemlerden haberdar olmadigini ve temel yapiyi anlatmaya basladigimi gorunce genel olarak bu sistemleri anlatan bir yazi yazmanin faydali olacagini dusundum.

Versiyon kontrol sistemleri (Version Control Systems veya Revision Control Systems) agirlikli olarak yazilim gelistirme prosesinin bir parcasi olarak dusunulse de genel kavram olarak herhangi bir dosya veya dokumandaki degisiklikleri takip edebileceginiz yazilimlardir. 

Yazilim dunyasindaki kullanimi ise cogunlukla herhangi bir koddaki degisiklikleri takip etmenizi saglar.. Ama tabii ki proje dokumanlarini da bu yapi altinda bulundurdugumuz zamanlar oluyor. 

Bu yazimda temel source kontrol yapisindan bahsedecegim ancak bunlarin buyuk cogunlugu proje dokumanlari icin de gecerli olacaktir. Temel olarak cogu versiyon kontrol sistemi belli basli bazi islemleri yapabilecek yapilari icerir:

  1. Sistemde var olan dosyanin son versiyonunu almak ( Check-out )
  2. Sisteme bir dosyanin degisikligini gondermek ( Check-in )
  3. Sistemdeki dosyanin baska biri tarafindan degistirilmesini engellemek ( Lock )

Bunlarin disinda yazilim gelistirme sureclerinde branch ve trunk tabirleriyle karsilasabilirsiniz. Kisaca anlatmam gerekirse trunk devam eden projenin gelistirme surecinin en son halinin tutuldugu genellikle stabil olmayan ve surekli gelistirmeye acik bir versiyonudur. Branch ise belirli ozellikleri trunk'tan farkli olabilen ornegin X modulunu icerir ancak trunk'ta X modulu yoktur. Bu modulun gelistirmesi branch'ta yapilir ve ana kodu etkilemez. Bir diger farkli tabir ise merge.. Merge biraz evvel verdigim ornekten yola cikarsak, X modulunun branch'ta gelistirmesi tamamlandiktan sonra trunk tarafina alinmak istenebilir iste bu birlestirme islemi merge olarak adlandirilir.

Bu tabirlerin disinda farkli sistemlerde farkli tabirler ile karsilasabilirsiniz.. Ornegin commit, get latest, update gibi.. Bunlar sadece ayni seylerin farkli isimlendirmesidir.. Commit, check in le ayni seydir ancak birden fazla dosyayi ayni anda checkinlemek icin de kullanilir.. Get Latest = Update = Check-out

Son olarak piyasada en fazla kullanilan versiyon kontrol sistemlerinin bir listesini paylasmak istiyorum. Bunlarla asina olursaniz sizin faydaniza olacaktir..

  • Subversion
  • Visual Source Safe 
  • TFS ( Team Foundation System )
  • GIT

Bunlarin disinda en fazla kullanilan ve bu sistemlere baglanmanizi saglayan client tool'lar ise,

  • Tortoise ( Subversion )
  • AnkhSVN ( Subversion - Visual Studio integrated )
  • Team Explorer ( Built-in tool at Visual Studio )
  • SmartGit ( GIT )

Umarim sizleri bu sistemlere biraz da olsa asina edebilmisimdir.. Herkese kolay gelsin..

Tags: , , ,

Yazılım

Game Project - Hopper

by Volem March 11, 2011 12:33

 Merhaba,

 Kisa zaman once bir arkadasimla birlikte online oyun projesi fikriyle heyecanlandik. Genel modeli olusturduk ve bir beyin firtinasi sonucunda  fikrimiz ufak da olsa hayata gecti. Ancak bu asamada bizimle beraber calisacak gonullu yazilimci ve tasarimci arkadaslarla beraber calismak  istiyoruz. Su anda yapimiz .NET Framework 4.0, C# ve MSSQL Server 2008 uzerinde yer aliyor. Versiyon control sistemi olarak da subversion  kullaniyoruz.

 Eger benim de corbada tuzum olsun diyorsaniz ve bir oyun projesinde hobi olarak calismak hosunuza giderse benimle irtibat kurabilirsiniz. ( E-Mail )

Tags:

Yazılım | C#

Hosting JQuery at Google CDN

by Volem January 06, 2011 10:23

Merhabalar,

Web development'la biraz icli disli olan herkes JQuery'yi kullanmis veya duymustur. Genellikle yapilan JQuery'nin official sitesine gidip size uygun bir versiyonu indirip ardindan da projenize dahil etmektir. Bugun size bunu yapmanin farkli bir yolunu ve neden boyle yapmaniz gerektigini anlatacagim.

JQuery kutuphanesini projenize yuklemeyin :). Simdi ne sacmaliyorsun diyeceksiniz ama biraz sabir diyorum.

Herhangi bir kullanici sitenize ilk defa baglandigi zaman veya temporary internet files klasorunu bosalttigi zaman JQuery'yi sistemine indirir eger ki siz

<script type="text/javascript" src="/js/jQuery.min.js"/></script>

gibi bir kod eklemisseniz. Tamam bu normal diyeceksiniz ancak JQuery'yi google api ile yuklerseniz daha once google'a girmis bir userin (%99 ihtimal) sizin bu dosyanizi indirmesine gerek kalmayacaktir. Dolayisiyla bu sayfanizin yuklenmesine bir hiz katacaktir. Content delivery network kisaca CDN hizmeti veren google'dan istediginiz JQuery'i versiyonunu yuklemek size baglanan kullanicinin ayni zamanda en yakin CDN server'indan bu dosyayi indirmesini saglayacaktir ki bu da ayrica bir hiz saglar. CDN hizmeti veren baska kurum ve kuruluslar olmasina ragmen google'in bu hizmeti bedava vermesi ve herkesin google kullaniyor olmasi onu 1 numara yapiyor.

Bunun disinda baska bir performans avantaji google serverlari sizin serverinizdan cok daha hizli bu kesin.. Dolayisiyla cok hit alan bir sayfaniz varsa bu download trafigini google cdn serverlarina aktarmak size yine avantaj saglayacaktir. Ayrica browserlarin buyuk bir cogunlugu serverlara gereksiz fazla yuklenmeyi engellemek icin host basina ayni anda en fazla 2 connection acmaktadir. Bu da su demek oluyor www.volkanmetin.com.tr'ye baglandiginizda bu hostun oldugu server'dan content indiriliyor + google analytics verisi isleniyor + facebook ve twitter connection yapiliyor ve bunlarin her biri 2 paralel process ile indiriliyor. Dolayisiyla CDN kullanirsaniz bu hosttan indirecegi content'i daha rahat indirecektir. (Parallel calisma artacak)

Anladik avantajlari var peki google CDN kullanarak JQuery'i nasil yukleyecegiz. Iste 2 method.. 1.si google'in onerdigi, 2.si good old fashioned method...

Buradan hangi versiyonlarin google cdn'de host edildigine bakabilirsiniz.

<script type="text/javascript"
        src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
  // Burada istediginiz versiyonu yukleyebilirsiniz..
  google.load("jquery", "1.4.4");
 
  google.setOnLoadCallback(function() {
    // Burasi da $(document).ready() icin kullanabileceginiz alternatif..
  });
</script>

<script type="text/javascript"
 src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
   
  });
</script>

Tags: , ,

Yazılım | Web

Powered by BlogEngine.NET 1.6.0.0
Theme by Mads Kristensen | Modified by Volem

RSS
View Volkan Nazmi Metin's profile on LinkedIn

RevolverMap

Son Eklenen Yazılar

Yazar Hakkında

Sosyal, evli, çocuklu, karısını ve kızını çok seven, gezmeyi seven, spor yapmak isteyen bir mühendis