0

必要なディレクトリに他のディレクトリがなくても、ディレクトリからファイルをダウンロードしようとしています。

私は答えを求めてインターネットを検索しましたが、私が見つけたのはFileMask "|*/"inを使用することだけTransferOptionsでした。これは機能せず、何もダウンロードしません。

最新バージョン (5.7.5) の使用

TransferOptions t = new TransferOptions { FileMask = "|*/" };

session.GetFiles("/", @"C:\bla", false, t);
4

1 に答える 1

2

サブディレクトリを除外するコードは正しいです。

WinSCP FAQ も参照してくださいディレクトリを非再帰的に転送するにはどうすればよいですか?

TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "|*/";

session.PutFiles(@"d:\toupload\*", "/home/user/", false, transferOptions);

それはあなたのコードに相当します。


コードに他の問題があります。

  1. WinSCP にルート ディレクトリをダウンロードするように要求しますが、すべてのディレクトリを除外します。したがって、何もダウンロードされません。ルート ディレクトリにあるすべてのファイルをダウンロードするように依頼する必要があります: /*.

    remotePathのパラメーターのGetFilesドキュメントを引用する:

    ダウンロードするファイルまたはサブディレクトリを選択するためのスラッシュとワイルドカードが続くリモート ディレクトリへのフル パス。ディレクトリ内のすべてのファイルをダウンロードするには、 mask を使用します*

  2. C:\blaがターゲットディレクトリであると仮定します。したがって、バックスラッシュを追加して、ディレクトリにファイルをダウンロードするように WinSCP に指示する必要がありますC:\bla\C:\そうしないと、WinSCP はすべてのファイルをname で保存しようとしますbla。その名前のディレクトリが既に存在する場合、失敗します。または、ファイルがない場合は、ファイルを互いに上書きします。

    localPathのパラメータのGetFilesドキュメント:

    ファイルをダウンロードするフル パス。複数のファイルをダウンロードするときは、パス内のファイル名を操作マスクに置き換えるか、省略してください (パスはバックスラッシュで終わります)。

  3. 返された を検査するか、 を直接TransferOperationResult呼び出して、エラーをチェックする必要があり.Check()ます。

したがって、正しいコードは次のとおりです。

TransferOptions t = new TransferOptions { FileMask = "|*/" };

session.GetFiles("/*", @"C:\bla\", false, t).Check();
于 2015-10-13T18:20:02.290 に答える