Как указать содержимое каталога с FTP в С#?
Как указать содержимое каталога с FTP в С#?
Я использую ниже код для содержимого списка каталогов с FTP, он возвращает результат в формате XML, но я хочу только имя каталога, а не весь контент.
Как я могу это сделать?
public class WebRequestGetExample
{
public static void Main ()
{
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/");
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential ("anonymous","[email protected]");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Console.WriteLine(reader.ReadToEnd());
Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription);
reader.Close();
response.Close();
}
}
MSDN
Ответы
Ответ 1
Попробуйте следующее:
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
ftpRequest.Credentials =new NetworkCredential("anonymous","[email protected]");
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
List<string> directories = new List<string>();
string line = streamReader.ReadLine();
while (!string.IsNullOrEmpty(line))
{
directories.Add(line);
line = streamReader.ReadLine();
}
streamReader.Close();
Он дал мне список каталогов... все перечисленные в списке строк каталогов... скажите мне, если это то, что вам нужно
Ответ 2
Возможно, вы ищете PrintWorkingDirectory
Ответ 3
Вам нужно ListDirectory, в котором перечислены содержимое каталога
РЕДАКТИРОВАТЬ: Или вы можете использовать эту библиотеку Chilkat, которая прекрасно ее обертывает для вас
Ответ 4
Некоторые прокси переформатируют список каталогов, поэтому достаточно сложно разобрать листинг каталога, если вы не можете гарантировать, что прокси не изменится
Ответ 5
Существует метод GetDirectoryInformation() в следующей ссылке, которая рекурсивно извлекает файлы и каталоги из каталога FTP.
Рекурсивно восстанавливать файлы из каталога FTP
Ответ 6
Самый простой и наиболее эффективный способ получения содержимого каталога FTP:
var contents = GetFtpDirectoryContents (новый Uri ( "ftpDirectoryUri" ), новый NetworkCredential ( "имя пользователя", "пароль" ));
public static List<string> GetFtpDirectoryContents(Uri requestUri, NetworkCredential networkCredential)
{
var directoryContents = new List<string>(); //Create empty list to fill it later.
//Create ftpWebRequest object with given options to get the Directory Contents.
var ftpWebRequest = GetFtpWebRequest(requestUri, networkCredential, WebRequestMethods.Ftp.ListDirectory);
try
{
using (var ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse()) //Excute the ftpWebRequest and Get It Response.
using (var streamReader = new StreamReader(ftpWebResponse.GetResponseStream())) //Get list of the Directory Contentss as Stream.
{
var line = string.Empty; //Initial default value for line.
do
{
line = streamReader.ReadLine(); //Read current line of Stream.
directoryContents.Add(line); //Add current line to Directory Contentss List.
} while (!string.IsNullOrEmpty(line)); //Keep reading while the line has value.
}
}
catch (Exception) { } //Do nothing incase of Exception occurred.
return directoryContents; //Return all list of Directory Contentss: Files/Sub Directories.
}
public static FtpWebRequest GetFtpWebRequest(Uri requestUri, NetworkCredential networkCredential, string method = null)
{
var ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri); //Create FtpWebRequest with given Request Uri.
ftpWebRequest.Credentials = networkCredential; //Set the Credentials of current FtpWebRequest.
if (!string.IsNullOrEmpty(method))
ftpWebRequest.Method = method; //Set the Method of FtpWebRequest incase it has a value.
return ftpWebRequest; //Return the configured FtpWebRequest.
}
Ответ 7
Если вы хотите указать имя файлов, находящихся внутри каталога, вы должны указать
(reqFTP.Proxy = null;) перед вызовом (reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;).
Надеюсь, это поможет вам!