2

[質問]Session::RemoveFiles()ソースディレクトリのサブディレクトリにあるファイルは削除されますか? そうでない場合、この機能を実装する方法は?

(リモートディレクトリを としている理由を聞かないでください/C/testTransfer/。コードはテスト目的のためだけです。)

WinSCP .Net アセンブリを使用する SFTP プログラムがあります。プログラム言語は C++/CLI です。作業ファイルを開きます。このファイルには、多くの行の FTP 命令が含まれています。

私が処理しなければならない命令の 1 つは*.txt、ソース ディレクトリから転送することです。ソースディレクトリにはサブディレクトリが含ま.txtれる場合があり、サブディレクトリも同様に含まれる場合があります。転送が成功したら、ソース ファイルを削除します。

Session::GetFiles()乗り換えに利用しています。.txt転送元のすべてのファイル ( /C/testTransfer/*.txt) は、サブ ディレクトリ内のファイル ( ) も含めて、転送先に正しく転送され/C/testTransfer/sub/*.txtます。

transferOptions->FileMask = "*.txt";
session->GetFiles("/C/testTransfer", "C:\\temp\\win", false, transferOption);

削除するには、 を使用しますsession->RemoveFiles("/C/testTransfer/*.txt")*.txtソース ( ) でのみ表示さ/C/testTransfer/*.txtれ、サブディレクトリ ( /C/testTransfer/sub/*.txt) では表示されず、削除されます。

4

1 に答える 1

2

一般に、サブディレクトリ内のSession::RemoveFilesファイルも削除できます。ただし、ワイルドカードを使用した場合はそうではありません。これは、WinSCP がワイルドカード ( *.txt) に一致しないサブディレクトリに降りないためです。また、ワイルドカードが必要ない場合Session::RemoveFilesでも、サブディレクトリ自体も削除されることに注意してください。これが必要かどうかはわかりません。

他の(そしてより良い=より安全な)オプションがありますが:

  • メソッドのremoveパラメーターを使用して、転送が成功した後にソース ファイルを削除するように指示します。Session::GetFiles

  • ソース ファイルをトランザクションで削除する必要がある場合 (= すべてのファイルのダウンロードが成功した後でのみ)、TransferOperationResult::Transfers返されたを繰り返し、 for eachSession::GetFilesを呼び出します(が null でない場合を除く)。Session::RemoveFilesTransferEventArgs::Error

    を使用して、TransferEventArgs::FileNameに渡すファイル パスを取得しますSession::RemoveFilesRemotePath::EscapeFileMaskに渡す前に、 を使用してファイル名をエスケープしますSession::RemoveFiles

    アップロードが成功した後、ローカル ファイルを別の場所に移動するために利用できる同様の完全な例があります。

  • スタンドアロン操作で (同じファイルをダウンロードした後ではなく) ワイルドカードに一致するファイルを再帰的に削除するには、Session::EnumerateRemoteFiles. mask引数にワイルドカードを渡します。EnumerationOptions.AllDirectories再帰にはオプションを使用します。

    Session::RemoveFiles返されたファイルごとに を呼び出します。RemotePath::EscapeFileMaskに渡す前に、 を使用してファイル名をエスケープしますSession::RemoveFiles

于 2014-05-07T06:27:20.187 に答える