Lord Eddard Stark

by Volem November 28, 2011 17:40

Tags: , , ,

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#

Hafta Başı ve Hafta Sonu Hesaplama

by Volem July 04, 2011 13:06

Gecenlerde haftayi ve yili bilip de haftanin ilk ve son gununu hesaplama ihtiyacim duydum. Umarim sizin de isinize yarar..


public class CalendarHelper
{
    /// <summary>
    /// Calculates start and end date of a week for a specific year.
    /// </summary>
    /// <param name="year">Year</param>
    /// <param name="week">Week number</param>
    /// <param name="startDate">Calculated start date of week</param>
    /// <param name="endDate">Calculated end date of week</param>
    public static void StartEndDateOfWeek(int year, int week, out DateTime startDate, out DateTime endDate)
    {
        // First of January
        DateTime jan1 = new DateTime(year, 1, 1);
 
        // Calculation is done according to the first day of week is monday but includes the offset,
        // so it will be correct for sunday and other first day of week.
        int daysOffset = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek - (int)jan1.DayOfWeek;
        DateTime firstMonday = jan1.AddDays(daysOffset);
 
        // Find the first week.
        int firstWeek = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(jan1, CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule,
            CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);
 
        if (firstWeek <= 1)
        {
            week -= 1;
        }
        startDate = firstMonday.AddDays(week * 7);
        endDate = startDate.AddDays(6);            
    }
}

Tags: , , , ,

C#

Code First Migration Preview

by Volem June 14, 2011 12:57

Tags: , , ,

Uygulama | Yazılım

ADO.NET EF 4.1 Code First Development

by Volem June 09, 2011 14:58

Tags: , , ,

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

Triodor AR-GE

by Volem April 05, 2011 16:45

Tags:

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