FtpWebRequest ListDirectory不返回隐藏文件

使用FtpWebRequest列出目录的内容; 但是,它没有显示隐藏文件。

如何让它显示隐藏文件?

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp_root + path); request.Method = WebRequestMethods.Ftp.ListDirectory; 

FileZilla正确列出了隐藏文件,因此我知道FTP服务器正在将数据返回给它。 我只需要用FtpWebRequest复制它。 或者使用不同的库。

Microsoft提供的FtpWebRequest不执行列出FTP,FTPS或SFTP站点目录所需的所有操作。

一个很好的解决方案是使用其他一些dll,如WinScp,Ftp.dll,它可以为您提供一些有效和额外的function。

某些FTP服务器无法将隐藏文件包含在对LISTNLST命令(位于ListDirectoryDetailsListDirectory )的ListDirectoryDetails

一种解决方案是使用MLSD命令,FTP服务器确实返回隐藏文件。 无论如何, MLSD命令是与FTP服务器通信的唯一正确方式,因为它的响应格式是标准化的( LIST不是这种情况)。

但.NET framework / FtpWebRequest不支持MLSD命令。

为此,您必须使用不同的第三方FTP库。

例如,使用WinSCP .NET程序集,您可以使用:

 // Setup session options SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Ftp, HostName = "ftp.example.com", UserName = "user", Password = "mypassword", }; using (Session session = new Session()) { // Connect session.Open(sessionOptions); RemoteDirectoryInfo directory = session.ListDirectory("/remote/path"); foreach (RemoteFileInfo fileInfo in directory.Files) { Console.WriteLine( "{0} with size {1}, permissions {2} and last modification at {3}", fileInfo.Name, fileInfo.Length, fileInfo.FilePermissions, fileInfo.LastWriteTime); } } 

请参阅Session.ListDirectory方法的文档。

如果服务器支持,WinSCP将使用MLSD 。 如果没有,它将尝试使用-a技巧(如下所述)。

(我是WinSCP的作者)


如果您遇到FtpWebRequest ,可以尝试使用-a开关和LIST / NLST命令。 虽然这不是任何标准交换机(FTP中没有交换机),但许多FTP服务器都能识别它。 它使它们返回隐藏文件。

要欺骗FtpWebRequest-a开关添加到LIST / NLST命令,请将其添加到URL:

 WebRequest.Create("ftp://ftp.example.com/remote/path/ -a");