1

これが私が最初に素人の言葉でやりたいことです: 私はファイルを取得したいです (そしておそらくいくつかのファイルのみ)。サブディレクトリがある場合は、それらのサブディレクトリにもファイルを取得したいと考えています。Visual C++/CLI を使用してプログラミングしているため、.net アセンブリを使用しています。

WinSCP では、それは を使用することSession.SynchronizeDirectories()です。最後のパラメーターはTransferOptions(クラス) で、通常は null に設定されます。基本的に、これはすべてのファイルが転送されることを意味します。オブジェクトを作成してプロパティを設定すると、string FileMask特定のファイルのみを転送できるはずです。

そこで、WinSCP C#のサンプル プログラムを次のように変更します。

using (Session session = new Session())
{
    // Will continuously report progress of synchronization
    session.FileTransferred += FileTransferred;

    // Connect
    session.Open(sessionOptions);

    // Create a TransferOptions object
    TransferOptions tro = new TransferOptions();
    tro.FileMask = "*.txt";
    tro.TransferMode = TransferMode.Automatic;

    // Synchronize files
    SynchronizationResult synchronizationResult;
    synchronizationResult =
        session.SynchronizeDirectories(
             SynchronizationMode.Local, @"C:\temp\win", "/C/Users/peter/Documents/WinSCP5.5.1/",
             false, false, SynchronizationCriteria.Time, tro);

    // Throw on any error
    synchronizationResult.Check();
}

プログラムを実行すると、現在のディレクトリとサブディレクトリ内のすべてが転送されます!

これらのオプションを指定するのは間違っているかもしれないと考えています。私は WinSCP プログラムを使用しています。(WinSCP Web サイトの転送設定ダイアログページの図を参照できます。)

ファイルマスクに次のように入力することを除いて、すべてのオプションは明確です。 *.txt

[OK] ボタンをクリックして転送を開始します。プレビュー オプションをオンにしました。そして、サブディレクトリ内のファイルであっても、選択された txt ファイルのみが表示されます

WinSCP プログラムは動作しますが、API は動作しませんか?

[編集] WinSCP アセンブリのバージョン 5.5.2 を使用しています。

4

1 に答える 1

0

最後に、イースター休暇の前に機能するようになりました。@Martin でしばらく作業した後、問題を解決しました。(解決策を見つけたと言っているわけではないことに注意してください。):(

とにかく、WinSCP 5.5.2 バージョンのソース コードをダウンロードします。Visual Studio 2008 を使用しているため、プロジェクトをドット ネット バージョン 4 からバージョン 3.5 に変更する必要があります。元のプロジェクトに含めます。コンパイルします。わかった。その出力 DLL を使用する元のプロジェクトがあります。WinSCP EXE もバージョン 5.5.2 であることを確認します。それを実行します。問題ない。ファイルマスクが機能しています。

興味があれば、ただのサイドストーリーです。ソース コード プロジェクトを使用した後、それを削除します。Web サイトからダウンロードした 5.5.2 DLL を使用します。突然、プログラムは最初のステートメントを実行するのに 30 秒ほどかかります。次に、バージョン 5.5.1 の EXE と DLL を使用します。同じ遅延。5.5.3 EXE および DLL に切り替えます。同じ30代かそこらの遅れ。DLL を削除し、5.5.3 .net アセンブリ ソース コードを使用します。コンパイルします。プログラムはすぐに実行されます。

これからは、.net アセンブリをコンパイルして使用すると思います。

助けてくれてありがとうマーティン。

于 2014-04-17T09:00:17.063 に答える