1

ここには Windows サーバーがあり、ある日、sftp 経由でフォルダー内のいくつかのテキスト ファイルを取得します。これ以上の情報はありませんが、これで十分かもしれません。ここで、これらのファイルを別のフォルダーに移動する関数を作成する必要があります。それほど難しいことではないはずだと思っていましたが、ファイルが完成する前に移動できることに気付きました。だから私はいくつかの解決策を探していましたが、本当に混乱しています。

私の解決策は、ファイルとその周りのプロセスをチェックすることです。ファイルがまだ完成していない場合は、コピープロセスがあり、このプロセスを確認できるためです。これを簡単にするために、ファイルをロックするだけで済みます。別のプロセスがなければ、ファイルを移動する準備ができていますか?

using (File.Open("myFile", FileMode.Open, FileAccess.Read, FileShare.None)) 
{ /*rdy!*/ }

しかし今、人々がチェックサム テストやファイル サイズのテストについて何かを書いていることがわかりました。ファイル サイズが変化していなければ、ファイルの準備は完了です。これは少し複雑ではありませんか?私のソリューションも機能する可能性があることを教えてください...サーバーからサーバーへのsftpのものでテストすることはできません。ファイルを(エクスプローラー経由で)別のフォルダーにコピーすると、これが機能することを知っています。これは sftp 転送でも機能しますか? 何か案は?ありがとうございました

4

1 に答える 1

3

ファイル サイズのチェックは危険です。アップロードが一時停止され、後で再開された場合はどうなりますか? 現在のファイル サイズを最終的なファイル サイズとして受け入れるまで、どのくらいの時間が必要ですか? =>良い解決策ではありません。

私はロックに行きますが、これは、ファイルを書き込むプロセスが排他的にロックされるようにファイルを開く場合にのみ機能します。プロセスがそれを行わない場合、問題が再び発生します。

別の解決策は、「.sftptmp」などの一時的な名前でファイルをアップロードすることです。そして、アップローダーが完了後に名前を変更するようにします。そうすれば、ファイルがアップロードされたことを確認できます。「.sftptmp」で終わるすべてのファイルを無視してください。ただし、これは、ファイルのアップロード プロセスを実際に制御できることを前提としています。

于 2012-12-03T14:44:24.077 に答える