Список всех файлов из онлайн-каталога FTP в listview C#
Как я и все остальные, кто читает этот список всех файлов из онлайн-каталога в listview?
это код для локального каталога, который должен быть указан я хотел бы знать, был ли способ сделать его так, чтобы он подключался к веб-сайту FTP и перечислял файлы?
FolderBrowserDialog folderPicker = new FolderBrowserDialog();
if (folderPicker.ShowDialog() == DialogResult.OK)
{
ListView1.Items.Clear();
string[] files = Directory.GetFiles(folderPicker.SelectedPath);
foreach (string file in files)
{
string fileName = Path.GetFileNameWithoutExtension(file);
ListViewItem item = new ListViewItem(fileName);
item.Tag = file;
ListView1.Items.Add(item);
}
}
я использовал этот код, но я не могу заставить его работать, не придумывая ошибку, но и не перечисляя файлы на веб-сервере?
private void ConnectBtn_Click(object sender, EventArgs e)
{
ListDirectory();
}
public string[] ListDirectory()
{
var list = new List<string>();
var request = createRequest(TxtServer.Text, WebRequestMethods.Ftp.ListDirectory);
using (var response = (FtpWebResponse)request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream, true))
{
while (!reader.EndOfStream)
{
list.Add(reader.ReadLine());
}
}
}
}
return list.ToArray();
}
private FtpWebRequest createRequest(string uri, string method)
{
var r = (FtpWebRequest)WebRequest.Create(uri);
r.Credentials = new NetworkCredential(TxtUsername.Text, TxtPassword.Text);
r.Method = method;
return r;
}
5 ответов
можно использовать эта библиотека обертки.
код:
public string[] ListDirectory() {
var list = new List<string>();
var request = createRequest(WebRequestMethods.Ftp.ListDirectory);
using (var response = (FtpWebResponse)request.GetResponse()) {
using (var stream = response.GetResponseStream()) {
using (var reader = new StreamReader(stream, true)) {
while (!reader.EndOfStream) {
list.Add(reader.ReadLine());
}
}
}
}
return list.ToArray();
}
вот хороший помощник, чтобы получить все файлы и папки каталога FTP:
public static IEnumerable<string> GetFilesInFtpDirectory(string url, string username, string password)
{
// Get the object used to communicate with the server.
var request = (FtpWebRequest)WebRequest.Create(url);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(username,password);
using (var response = (FtpWebResponse) request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (string.IsNullOrWhiteSpace(line) == false)
{
yield return line.Split(new[] { ' ', '\t' }).Last();
}
}
}
}
}
найдено здесь:http://www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c
Я нашел ответ, который я немного экспериментировал, и теперь его отображение файлов в listview, спасибо Роберт Харви♦
private void ConnectBtn_Click(object sender, EventArgs e)
{
ListDirectory();
}
public string[] ListDirectory()
{
var list = listView1;
var request = createRequest(TxtServer.Text, WebRequestMethods.Ftp.ListDirectory);
using (var response = (FtpWebResponse)request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream, true))
{
while (!reader.EndOfStream)
{
list.Items.Add(reader.ReadLine());
}
}
}
} List<string> l = new List<string>();
return l.ToArray();
}
private FtpWebRequest createRequest(string uri, string method)
{
var r = (FtpWebRequest)WebRequest.Create(uri);
r.Credentials = new NetworkCredential(TxtUsername.Text, TxtPassword.Text);
r.Method = method;
return r;
}
этот код можно использовать для получения списка файлов с ftp
private void ftpFileRead()
{
FtpWebRequest Request = (FtpWebRequest)WebRequest.Create("your ftpAddress");
Request.Method = WebRequestMethods.Ftp.ListDirectory;
Request.Credentials = new NetworkCredential(your ftp username,your ftp password);
FtpWebResponse Response = (FtpWebResponse)Request.GetResponse();
Stream ResponseStream = Response.GetResponseStream();
StreamReader Reader = new StreamReader(ResponseStream);
ListBox1.Items.Add(Response.WelcomeMessage);
while (!Reader.EndOfStream)//Read file name
{
ListBox1.Items.Add(Reader.ReadLine().ToString());
}
Response.Close();
ResponseStream.Close();
Reader.Close();
}
вы можете использовать этот метод.
public static string[] GetFiles(string path, NetworkCredential Credentials, SearchOption searchOption)
{
var request = (FtpWebRequest)WebRequest.Create(path);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = Credentials;
List<string> files = new List<string>();
using (var response = (FtpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var reader = new System.IO.StreamReader(responseStream);
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (string.IsNullOrWhiteSpace(line) == false)
{
if (!line.Contains("<DIR>"))
{
string[] details = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
string file = line.Replace(details[0], "")
.Replace(details[1], "")
.Replace(details[2], "")
.Trim();
files.Add(file);
}
else
{
if (searchOption == SearchOption.AllDirectories)
{
string dirName = line.Split(
new string[] { "<DIR>" },
StringSplitOptions.RemoveEmptyEntries
).Last().Trim();
string dirFullName = String.Format("{0}/{1}", path.Trim('/'), dirName);
files.AddRange(GetFiles(dirFullName, Credentials, searchOption));
}
}
}
}
}
}
return files.ToArray();
}