2012-08-16 57 views
6

Tôi đã tải xuống tệp từ máy chủ FTP qua đối tượng WebClient mà không gian tên .NET cung cấp và sau đó ghi byte vào tệp thực tế qua BinaryWriter. Mọi thứ đều tốt. Tuy nhiên, bây giờ, các tệp đã tăng kích thước đáng kể và tôi lo lắng về các ràng buộc về bộ nhớ vì vậy tôi muốn tạo luồng tải xuống, tạo luồng tệp và đọc từng dòng từ tệp tải xuống và ghi vào tệp.C# Webclient Stream tải xuống tệp từ FTP sang bộ nhớ cục bộ

Tôi lo lắng vì tôi không thể tìm thấy ví dụ điển hình về điều này. Đây là kết quả cuối cùng của tôi:

var request = new WebClient(); 

// Omitted code to add credentials, etc.. 

var downloadStream = new StreamReader(request.OpenRead(ftpFilePathUri.ToString())); 
using (var writeStream = File.Open(toLocation, FileMode.CreateNew)) 
{ 
    using (var writer = new StreamWriter(writeStream)) 
    { 
     while (!downloadStream.EndOfStream) 
     { 
      writer.Write(downloadStream.ReadLine());     
     } 
    } 
} 

Tôi có đi về cách này không chính xác/tốt hơn không?

Trả lời

8

Bạn đã thử sử dụng WebClient lớp sau đây chưa?

using (WebClient webClient = new WebClient()) 
{ 
    webClient.DownloadFile("url", "filePath"); 
} 

Cập nhật

using (var client = new WebClient()) 
using (var stream = client.OpenRead("...")) 
using (var file = File.Create("...")) 
{ 
    stream.CopyTo(file); 
} 

Nếu bạn muốn tải tập tin một cách rõ ràng bằng kích thước bộ đệm tùy chỉnh:

public static void DownloadFile(Uri address, string filePath) 
{ 
    using (var client = new WebClient()) 
    using (var stream = client.OpenRead(address)) 
    using (var file = File.Create(filePath)) 
    { 
     var buffer = new byte[4096]; 
     int bytesReceived; 
     while ((bytesReceived = stream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      file.Write(buffer, 0, bytesReceived); 
     } 
    } 
} 
+0

Vâng, và vẫn còn là (các đối tượng yêu cầu là một WebClient [Tôi m cập nhật bài viết của tôi để hiển thị điều này explictly]) nhưng DownladFile sẽ cho tôi toàn bộ tập tin trong bộ nhớ - đối diện với những gì tôi đang tìm kiếm .. – OnResolve

+0

@OnResolve, xin lỗi, tôi đã không đề cập. Vui lòng xem bản cập nhật. –

+0

@OnResolve, tôi đã thêm phiên bản với kích thước bộ đệm tùy chỉnh. –

Các vấn đề liên quan