首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 2.0 FTP 用戶端實作(三):下載與檔案列表

     編輯:關於C語言

下載檔案

public void Download(string localPath, string fileName)
{
    try
    {
        string uri = $"ftp://{FtpServerIP}/{fileName}";
        var request = (FtpWebRequest)WebRequest.Create(uri);
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.UseBinary = true;
        request.Credentials = new NetworkCredential(FtpUserId, FtpPassword);

        using (var response = (FtpWebResponse)request.GetResponse())
        using (var ftpStream = response.GetResponseStream())
        using (var fileStream = File.Create(Path.Combine(localPath, fileName)))
        {
            byte[] buffer = new byte[2048];
            int bytesRead;
            while ((bytesRead = ftpStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                fileStream.Write(buffer, 0, bytesRead);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"下載失敗:{ex.Message}");
    }
}

取得檔案列表

public string[] GetFileList()
{
    try
    {
        var request = (FtpWebRequest)WebRequest.Create($"ftp://{FtpServerIP}/");
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        request.UseBinary = true;
        request.Credentials = new NetworkCredential(FtpUserId, FtpPassword);

        using (var response = (FtpWebResponse)request.GetResponse())
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            string content = reader.ReadToEnd();
            return content.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"取得列表失敗:{ex.Message}");
        return null;
    }
}

其他常用操作

操作Method 屬性值備註
重新命名WebRequestMethods.Ftp.Rename設定 request.RenameTo = "newname"
刪除檔案WebRequestMethods.Ftp.DeleteFile
取得檔案大小WebRequestMethods.Ftp.GetFileSize回應 ContentLength
詳細列表WebRequestMethods.Ftp.ListDirectoryDetails含權限、大小、時間
建立目錄WebRequestMethods.Ftp.MakeDirectoryURI 需包含目錄路徑

安全性與效能注意事項

  • SSL/TLS:設定 request.EnableSsl = true 加密傳輸(含帳密),需伺服器支援 FTPS
  • 被動模式:request.UsePassive = true(預設),穿透客戶端防火牆
  • 緩衝區大小:2KB 適合大多數情境,大檔案可調大至 64KB
  • 連線重用:request.KeepAlive = true 減少握手開銷
  • 例外處理:捕獲 WebException 檢查 Response.StatusCode 取得 FTP 狀態碼

現代替代方案

.NET Core / .NET 5+ 建議使用 FluentFTP 或 SSH.NET (SFTP),提供非同步 API、更豐富功能與更好相容性:

// FluentFTP 範例
using var client = new FtpClient("ftp.example.com", "user", "pass");
client.Connect();
await client.DownloadFileAsync("local.txt", "/remote.txt");
client.Disconnect();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved