2012-11-09 60 views
8

Điều tôi đang cố làm là tải lên trang web bằng FTP trong C# (C Sharp). Vì vậy, tôi cần phải tải lên tất cả các tệp và thư mục trong một thư mục, giữ cấu trúc của nó. Tôi đang sử dụng lớp FTP này: http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class để tải lên thực tế.C# Tải lên toàn bộ thư mục bằng cách sử dụng FTP

Tôi đã đi đến kết luận rằng tôi cần viết một phương thức đệ quy đi qua mọi thư mục con của thư mục chính và tải lên tất cả các tệp và thư mục trong đó. Điều này sẽ làm cho một bản sao chính xác của thư mục của tôi vào FTP. Vấn đề là ... Tôi không biết cách viết một phương pháp như thế. Tôi đã viết các phương pháp đệ quy trước đây nhưng tôi mới vào phần FTP.

Đây là những gì tôi có cho đến nay:

private void recursiveDirectory(string directoryPath) 
    { 
     string[] filePaths = null; 
     string[] subDirectories = null; 

     filePaths = Directory.GetFiles(directoryPath, "*.*"); 
     subDirectories = Directory.GetDirectories(directoryPath); 

     if (filePaths != null && subDirectories != null) 
     { 
      foreach (string directory in subDirectories) 
      { 
       ftpClient.createDirectory(directory); 
      } 
      foreach (string file in filePaths) 
      { 
       ftpClient.upload(Path.GetDirectoryName(directoryPath), file); 
      } 
     } 
    } 

Nhưng nó còn lâu mới hoàn và tôi không biết làm thế nào để tiếp tục. Tôi chắc chắn nhiều hơn tôi cần biết điều này! Cảm ơn trước :)

Ohh và ... Nó sẽ được tốt đẹp nếu nó báo cáo tiến độ quá :) (Tôi đang sử dụng một thanh tiến trình)

EDIT: Nó có thể đã không rõ ràng ... Làm cách nào để tải lên thư mục bao gồm tất cả các thư mục con và tệp bằng FTP?

+0

Và câu hỏi là gì? – J0HN

+0

Cho phép giải quyết một vấn đề đơn giản trước tiên. Viết một phương thức sẽ lặp qua từng Thư mục trong thư mục mẹ và tạo nó trên trang web được đề cập. Một khi bạn làm điều đó nó sẽ được dễ dàng, đủ để tải lên mỗi tập tin trong mỗi thư mục. Bạn không có đủ để chúng tôi giúp bạn. Tôi không thể tin rằng bạn có dây thần kinh để đưa ra yêu cầu tính năng ..... –

+1

Để tạo thanh tiến trình, bạn sẽ cần phải tải tất cả các tệp cần được tải lên. Tôi sẽ lưu trữ đường dẫn tệp trong Danh sách. Sau đó lặp qua các đường dẫn tệp để tải chúng lên máy chủ FTP. Sau mỗi lần tải lên, hãy cập nhật tiến trình. Một thanh chính xác hơn có thể đạt được bằng cách lưu trữ kích thước của tệp với đường dẫn tệp. Sau đó, khi mỗi tệp được tải lên, hãy tăng tiến độ theo kích thước của tệp. Nếu bạn cần tôi có thể thêm một ví dụ sau. – Trisped

Trả lời

11

Sự cố đã được giải quyết! :)

Được rồi vì vậy tôi đã quản lý để viết phương thức myslef. Nếu bất cứ ai cần nó cảm thấy tự do để sao chép:

private void recursiveDirectory(string dirPath, string uploadPath) 
    { 
     string[] files = Directory.GetFiles(dirPath, "*.*"); 
     string[] subDirs = Directory.GetDirectories(dirPath); 

     foreach (string file in files) 
     { 
      ftpClient.upload(uploadPath + "/" + Path.GetFileName(file), file); 
     } 

     foreach (string subDir in subDirs) 
     { 
      ftpClient.createDirectory(uploadPath + "/" + Path.GetFileName(subDir)); 
      recursiveDirectory(subDir, uploadPath + "/" + Path.GetFileName(subDir)); 
     } 
    } 

Nó hoạt động rất tốt :)

+0

Nó sẽ hoạt động nếu bạn đã đề cập rằng bạn đã sử dụng và thư viện bên ngoài để làm mã đó, trong đó bao gồm rất nhiều mã khác không phải do bạn thực hiện. –

+0

Ông đã làm trong câu hỏi. Nhưng tôi cũng muốn dự phòng, thay vì phải tìm kiếm liên kết. – CyberFox

+0

Điều này sẽ tạo tất cả các tệp và thư mục từ xa, nhưng tất cả các tệp có kích thước tệp là 0B. ??? – im1dermike

0

Trừ khi bạn đang thực hiện việc này để giải trí hoặc tự cải thiện, hãy sử dụng mô-đun thương mại. Tôi có thể giới thiệu một từ Chilkat, nhưng tôi chắc chắn có những người khác.

Lưu ý: Tôi chắc chắn điều này trả lời được vấn đề đã nêu, Điều tôi đang cố gắng tải lên trang web bằng FTP trong C# (C Sharp).

4

Tôi đã viết một FTP classe và cũng gói nó trong một điều khiển người dùng WinForms. Bạn có thể xem mã của tôi trong bài viết An FtpClient Class and WinForm Control.

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