2

FTP/SFTP 接続を使用してリモート サーバーから特定のファイルを取得しようとしています。問題は、リモート ディレクトリ内のファイルの数を特定のパターンで取得しようとしていることです。マスクを使用していますが、うまくいきません。例外がスローされます:これが私が持っているものです

DataFile.sRemoteDirectory = "/user/ftpuser/test/";
receivepattern = "Del*";
filesCount =
    session.ListDirectory(
        session.EscapeFileMask(DataFile.sRemoteDirectory + receivepattern))
    .Files.Where(x => !x.IsDirectory).Count();
4

2 に答える 2

1

Session.ListDirectoryメソッドはワイルドカードを受け入れず、パスのみを受け入れます。


WinSCP .NET アセンブリ 5.9 以降では、代わりに次のSession.EnumerateRemoteFilesメソッドを使用できます。

filesCount =
    session.EnumerateRemoteFiles(
        DataFile.sRemoteDirectory, receivepattern, EnumerationOptions.None).Count();

古いバージョンでは、Session.ListDirectory自分自身によって返されたファイルをフィルタリングする必要があります:

Regex r = new Regex("^Del.*");

filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files
    .Where(x => !x.IsDirectory)
    .Where(x => r.Match(x.Name))
    .Count()

ワイルドカードに一致するファイルを一覧表示する公式の例を参照してください(PowerShell で)。

于 2016-01-08T16:58:31.017 に答える
0

これは私がやったことであり、うまくいきました!誰かがこのコードを助けてくれることを願って、私は正規表現を使用しました。ここで、 receivepattern は使用されるパターンです:

receivepattern = "^[\\d\\w]*" + receivepattern;
r = new Regex(receivepattern);
filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files.Where(x => !x.IsDirectory).Where(x => r.IsMatch(x.Name)).Count();
于 2016-01-08T23:34:44.597 に答える