c# 訪問ftp

ftp從服務器上獲取通訊設備吐出的mr數據,該方案估計在通訊行業上一個很廣泛的一種方案,很奇怪爲何不把這些數據直接存儲到數據庫中呢,好比hadoop,反而還須要第三方搞網優的軟件開發人員從ftp上讀取成千萬的mr文件信息。數據庫

這種方案估計已經成公認的方案,可能緣由:c#

1,這樣的文件格式的不一樣意,數據庫很難定義格式,規則;windows

2,數據庫的制約行吧,數據庫比起寫文件來講仍是差了不少吧。無論從速度上,仍是靈活性來講,使用數據庫在通訊服務商來講該方案不可行性,簡直是不接受。服務器

很天然的事情,咱們不是隻讀本地幾十,幾百G的文件了,而是要變成從ftp上獲取到這麼多數據,以後去處理這些數據。該須要對軟件來講,無心ftp的穩定性,網絡的穩定性必要要求高。網絡

因此這種方案,必須ftp的服務必須在內網,外網的方式估計做死的節奏。內網對網絡傳輸速度,穩定性方面已經提高了不少。ide

其次咱們要處理的事情,要求:oop

1,) 使用c#去讀取ftp上的數據,該技術已經很成熟。測試

2,) 須要測試本身部署一個ftp服務,使用ftp客戶端來調試,獲取ftp信息,能獲取到什麼信息。spa

搭建serv-u:調試

1,)從網絡上下載serv-u,我選擇了低版本的ftp,

2,)配置好帳戶,分配用戶:test,密碼:123456,權限adiminstrator,全部權限(讀、寫、刪、移動、重命名文件|文件夾);

爲了調試ftp服務及帳號狀態,須要下載一個ftp客戶端.

我使用cute ftp,

鏈接地址localhost,帳號輸入test,密碼輸入:123456,測試沒問題,正常聯通:

怎麼使用c#讀取ftp上相關信息:

看到codeplex上已經有人寫出來無缺的ftp client類(開源代碼地址:http://ftplib.codeplex.com/,該類庫使用的方式是經過windows內核接口來獲取),就拿來測試了

測試代碼:

 const string HOSTNAME = "localhost";
        const string USERNAME = "test";
        const string PASSWORD = "123456";

        static void Main(string[] args)
        {
            using (FtpConnection ftp = new FtpConnection(HOSTNAME, USERNAME, PASSWORD))
            {
                ftp.Open(); /* Open the FTP connection */
                ftp.Login(); /* Login using previously provided credentials */

                if (ftp.DirectoryExists("/test")) /* check that a directory exists */
                    ftp.SetCurrentDirectory("/test"); /* change current directory */

                  ftp.SetLocalDirectory(@"E:\ftp-test");

                  if (ftp.FileExists("/test/1/dn.accdb")) /* check that a file exists */
                      ftp.GetFile("/test/1/dn.accdb", @"E:\ftp-test\1\dn.accdb", false); /* download /incoming/file.txt as file.txt to current executing directory, overwrite if it exists */

                //do some processing

                //try
                //{
                //    ftp.SetCurrentDirectory("/outgoing");
                //    ftp.PutFile(@"c:\localfile.txt", "file.txt"); /* upload c:\localfile.txt to the current ftp directory as file.txt */
                //}
                //catch (FtpException ex)
                //{
                //    Console.WriteLine(String.Format("FTP Error: {0} {1}", ex.ErrorCode, ex.Message));
                //}

                foreach (var dir in ftp.GetDirectories())
                {
                    Console.WriteLine(dir.Name);

                    foreach (var file in dir.GetFiles(dir.Name))
                    {
                        Console.WriteLine(file.Name);
                    }
                }

                Console.ReadKey();
            }
        }

 

輸入結果都可以正常鏈接,獲取信息:

以上算是一個測試ftp的一個過程吧,但針對咱們的項目,這些是一個基本功。

 

但願有更多牛人,給更多的建議...

相關文章
相關標籤/搜索