WinSCP .NET NuGetパッケージを使用して、制御できないサードパーティのFTPサーバーにアクセスしています。ファイルはサーバー上に存在しますが、リストディレクトリコマンドによって返されません。
問題:(すべてのファイルがリストされている)初期LIST
コマンドの後、サーバはもはやディレクトリに存在するファイルの一覧表示、と思われていない - 唯一のサブdirectoriresを。ただし、FireFoxまたはFileZillaで同じFTPディレクトリを開くと、ファイルが表示されます。対照的に、WinSCPツール自体はファイルをリストしません。
WinSCPは、これらのファイルを一覧表示しないように、サーバーからの指示に従っているようです。組み込みの.NET FTPライブラリ(FtpWebRequest
)にはまったく同じ制限があります。
私は、サーバーにアクセスするために使用していたコードは以下の通りです:
public class FTP
{
private SessionOptions opts = new SessionOptions();
public FTP(string _userName, string _password, string _server)
{
opts.UserName = _userName;
opts.Password= _password;
opts.HostName = _server;
opts.Protocol = Protocol.Ftp;
opts.FtpMode = FtpMode.Passive;
}
public string[] GetFiles(string directory)
{
try
{
using (Session session = new Session())
{
session.Open(opts);
RemoteDirectoryInfo dir = session.ListDirectory(directory);
return dir.Files.Where(x => !x.IsDirectory).Select(x => x.Name).ToArray();
}
}
catch (Exception)
{
throw;
}
}
}
は、回避策のWinSCP(あるいは、別のC#ライブラリ)内にこの状況を正しく処理することができますありますか?
PowerShellやバッチなどの外部プロセスは使用できますが、理想的ではありません。
お返事ありがとうございます。私自身のプロジェクトはすでに遠すぎて動いていますが、おそらく他の人にとって役に立ちます。これはファイルのダウンロードにも有効ですか? – vbnet3d
はい、ダウンロードしても動作します(WinSCPが「隠しファイル」をダウンロードすることになります)。 –