2009-02-17 26 views
12

Nếu khách hàng NET của tôi sử dụng System.IO.File.Copy để sao chép một tập tin từ \ server1 \ share1 \ file1.txt để \ sever1 \ share2 \ file2.txt, không dữ liệu của tập tin được đọc xuống máy khách và sau đó ghi lại máy chủ? Nếu có, có cách nào một máy khách .NET có thể sao chép một tệp trên máy chủ đến một vị trí khác trên cùng một máy chủ mà không cần cắt bớt tệp không? Liệu nó có tạo sự khác biệt nếu chia sẻ đích giống như chia sẻ nguồn không?File.Copy() từ một mạng chia sẻ với một phần khác trên cùng một máy có sao chép tập tin qua mạng không?

Trả lời

7

Có. Tôi có thể nói điều này từ kinh nghiệm cá nhân với việc sao chép 10 GB tệp Zip giữa các máy. Máy khách "" trên một bờ biển khác của Mỹ so với hai máy khác. Giữa hai máy trực tiếp từ một trong số họ mất một khoảng thời gian hợp lý. Cố gắng khởi tạo bản sao từ máy trên bờ biển khác mất ~ 10 giờ: (

2

Đó là một câu hỏi tuyệt vời - tôi dường như không thể tìm thấy câu trả lời dứt khoát nào, vì vậy có lẽ điều tốt nhất là để cháy lên Wireshark để kiểm tra.

+0

Tại sao bạn không bỏ phiếu cho câu hỏi của mình? Có lẽ bạn có và nó đã được bỏ phiếu xuống một lần nữa, nhưng có vẻ như nhiều người quên bỏ phiếu cho những câu hỏi hay. – Ash

+0

Cảm ơn bạn đã +1 và cảm ơn mẹo về công cụ.Tôi sẽ cập nhật câu hỏi của mình với đầu ra của công cụ này làm bằng chứng về câu trả lời "có" được chấp nhận, ngay sau khi tôi nhận được câu trả lời. – flipdoubt

4

Nội dung tệp phải đi qua máy thực hiện thao tác Sao chép. Cách duy nhất để chạy chương trình trên máy đích) thực hiện chuyển mà không có máy khách ở giữa, chẳng hạn như FXP sử dụng FTP để chuyển máy chủ sang máy chủ
Tuy nhiên, việc mở đường dẫn này cũng có thể mở lỗ hổng bảo mật và tôi nghi ngờ nhiều quản trị viên sẽ miễn cưỡng cho phép điều này

0

Nếu có thể thực hiện di chuyển thay vì sao chép, điều đó sẽ xảy ra ngay lập tức.Nếu không, bạn cần đặt dịch vụ trên máy mục tiêu để bạn có thể gọi nó từ xa

+0

Thật sao? Bạn có thể chứng minh điều đó? – flipdoubt

+0

Tôi không chắc chắn ý của bạn là "chứng minh" ở đây. Tôi vừa mới trình diễn nó trong Windows Vista. Hãy thử một lần. Sử dụng Explorer trên máy A để truy cập một phần trên máy B và 'Cắt' một thư mục con lớn và 'Dán' nó ở một nơi khác trong cùng một phần. Nó sẽ di chuyển ngay lập tức. –

+0

Như được giải thích bởi @cdonner, điều này sẽ chỉ hoạt động nếu hai thư mục trên cùng một chia sẻ. Nếu có hai cổ phần khác nhau, di chuyển sẽ được thực hiện dưới dạng bản sao + xóa bao gồm cả chuyến khứ hồi cho khách hàng. – Anlo

7

Đây là câu hỏi cũ, nhưng tôi không nghĩ có câu trả lời đúng ở đây.

Thực tế có 2 câu hỏi (3 câu hỏi, nhưng câu hỏi thứ 3 là dư thừa). Câu hỏi đầu tiên là nếu một tiến trình .Net chạy trên máy khách (3) sao chép một tệp từ một mạng chia sẻ sang một mạng chia sẻ khác, nó có tạo sự khác biệt nếu nguồn và mục tiêu chia sẻ trên cùng một máy tính (hay không?). khác với khách hàng) so với 2 máy tính khác nhau? Câu trả lời rõ ràng là không. Không có cơ chế, không có đường hầm bí mật giữa các chia sẻ mạng. Dữ liệu phải di chuyển đến khách hàng và sau đó chia sẻ với người khác. Nó không tạo sự khác biệt nếu thao tác là bản sao hoặc di chuyển, và nó thực sự không tạo sự khác biệt nếu các cổ phiếu trên cùng một máy tính với máy khách (và bạn thực sự truy cập các thư mục dưới dạng chia sẻ mạng với đường dẫn UNC chứ không phải dưới dạng thư mục cục bộ).

Câu hỏi thứ hai là, làm cách nào để tránh chuyến đi khứ hồi này? Dưới đây là một số đề xuất:

  1. Nếu nguồn và đích có cùng chia sẻ, di chuyển tệp không yêu cầu chuyến đi khứ hồi, vì hệ điều hành chỉ cập nhật tham chiếu trong hệ thống tệp.
  2. Quá trình chạy trên máy với nguồn hoặc mục tiêu chia sẻ có thể thực hiện bản sao mà không cần phải trả lời cho khách hàng. Quá trình này có thể là một bản sao từ xa, vv nếu một trong hai máy chủ chạy Linux. Trên một máy chủ Windows, bạn có thể cài đặt một dịch vụ WCF sao chép tệp khi một yêu cầu đến từ một máy khách.
Các vấn đề liên quan