2016-08-30 3 views
0

リモートマシンにあるファイルをC#でバックアップする必要があります。リモートファイルの移動とコピー

たとえば、 "\ server1 \ docs \ test.txt"を "¥server1¥docs¥backup¥test.txt"にコピーまたは移動する必要があります。

質問:File.Copyを使用すると、ファイルをサーバーからマシンに戻してサーバーに戻します。つまり、ファイルをネットワーク経由で本物にラウンドトリップさせますか?

私はラウンドトリップを避けたいと思います。

詳細:両方のマシンは、同じドメイン上のWindows OSです。

注:私はあなたがこの質問に対する回答を全部検索したことを皆さんに知ってもらいたいと思いますが、矛盾する回答が見つかりました。私は確実に知りたいです。あなたの時間をありがとう。

+0

[リモート共有間でファイルをコピーするための[SMBプロトコル]の可能な複製](http://stackoverflow.com/questions/31944769/smb-protocol-for-copying-files-between-remote-shares) – Av4t4r

答えて

1

データをラウンドトリップしないようにするには、サーバーから実行する必要があります。作業しようとしているファイルが同じハードドライブにある場合は、それらを移動するほうが、コピーするほうが高速です。

+0

私の状況は 'リモートサーバーに任意のプロセスを追加できます。リモートファイルの名前を変更するだけの場合はどうなりますか?それは往復を防止するだろうか? –

+0

リモートコンピュータにログインしてそこからコピーを発行するためにpowershellやpsツールを使用することはできませんか? – user1845593

+0

私はそれがどのような違いをもたらすかは分かりません。ファイルをコピーするためにクライアントを使用しています。つまり、サーバーは最初にバイトをクライアントに送信しなければならず、クライアントは別のフォルダーに戻すだけです。同じマシンでコピーを実行できない限り(.batファイルでもこの​​種の作業には適しています)、ラウンドトリップが発生しています。 – Av4t4r

0

C#(http://referencesource.microsoft.com/#mscorlib/system/io/file.cs,4a0905e7dc32d77d)のソースコードを見ると、File.CopyはWin32Native.CopyFile関数を呼び出すようです。正直言って、私はそれが何をしているのか分かりません。コードを見たことがないのですが、魔法はなく、リモートコンピュータからバイトを読み取り、他のリモートコンピュータに書き込みます。

編集

1つの選択肢は、(あなたがC#を経由でPSスクリプトを呼び出すことができます)PowerShellを経由してリモートサーバにログインし、第二のマシンにコピーするためのコマンドを実行することです。

+0

リモートマシンからのファイルのコピー、移動、および名前変更の実際のプロセスについて、私は驚いていました。私は、スタックのオーバーフローに関するいくつかの解決策を見つけましたが、答えは異なります。 –

+1

ネイティブwin32ファイルのコピーは、多くの要因によって異なります。使用されているWindowsのバージョン(両側)、ネットワークアクセスの種類(SMB/NFS/...)には単純な答えを与える方法はありません。 –

関連する問題