FtpWebRequest ListDirectory 没有 return 个隐藏文件
FtpWebRequest ListDirectory does not return hidden files
使用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 可以为您提供一些高效的额外功能。
一些 FTP 服务器无法包含隐藏文件以响应 LIST
和 NLST
命令(在 ListDirectoryDetails
和 ListDirectory
之后)。
一种解决方案是使用 MLSD
命令,FTP 服务器对其执行 return 隐藏文件。 MLSD
命令是与 FTP 服务器通信的唯一正确方式,因为它的响应格式是标准化的(LIST
不是这种情况)。
但是 .NET framework/FtpWebRequest
不支持 MLSD
命令。
为此,您必须使用不同的第 3 方 FTP 库。
例如 WinSCP .NET assembly 你可以使用:
// 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
method 的文档。
如果服务器支持,WinSCP 将使用 MLSD
。如果没有,它将尝试使用 -a
技巧(如下所述)。
(我是WinSCP的作者)
如果您受困于 FtpWebRequest
,您可以尝试使用 -a
开关和 LIST
/NLST
命令。虽然这不是任何标准开关(FTP 中没有开关),但许多 FTP 服务器确实可以识别它。它使它们成为 return 个隐藏文件。
要欺骗 FtpWebRequest
将 -a
开关添加到 LIST
/NLST
命令,请将其添加到 URL:
WebRequest.Create("ftp://ftp.example.com/remote/path/ -a");
使用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 可以为您提供一些高效的额外功能。
一些 FTP 服务器无法包含隐藏文件以响应 LIST
和 NLST
命令(在 ListDirectoryDetails
和 ListDirectory
之后)。
一种解决方案是使用 MLSD
命令,FTP 服务器对其执行 return 隐藏文件。 MLSD
命令是与 FTP 服务器通信的唯一正确方式,因为它的响应格式是标准化的(LIST
不是这种情况)。
但是 .NET framework/FtpWebRequest
不支持 MLSD
命令。
为此,您必须使用不同的第 3 方 FTP 库。
例如 WinSCP .NET assembly 你可以使用:
// 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
method 的文档。
如果服务器支持,WinSCP 将使用 MLSD
。如果没有,它将尝试使用 -a
技巧(如下所述)。
(我是WinSCP的作者)
如果您受困于 FtpWebRequest
,您可以尝试使用 -a
开关和 LIST
/NLST
命令。虽然这不是任何标准开关(FTP 中没有开关),但许多 FTP 服务器确实可以识别它。它使它们成为 return 个隐藏文件。
要欺骗 FtpWebRequest
将 -a
开关添加到 LIST
/NLST
命令,请将其添加到 URL:
WebRequest.Create("ftp://ftp.example.com/remote/path/ -a");