Некоторые FTP-серверы не включают скрытые файлы в ответы на команды LIST
и NLST
(которые стоят за ListDirectoryDetails
и ListDirectory
).
Одним из решений является использование команды 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");
person
Martin Prikryl
schedule
15.06.2017
ListDirectoryDetails
то, что вы хотите? Документация MSDN по нему очень скудна. - person Brendan Green   schedule 24.02.2017ListDirectoryDetails
, как предложил Брендан. - person Martin Prikryl   schedule 24.02.2017