将在线 FTP 目录中的所有文件列出到列表视图 C#
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13923193/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
List all files from online FTP directory to a listview C#
提问by Terrii
How could i and everyone else who is reading this list all files from online directory to a listview?
我和其他正在阅读此列表的人如何将所有文件从在线目录列出到列表视图?
This is the code for a local directory to be listed i would like to know if there was a way to make it so that is connects to a FTP website and lists files?
这是要列出的本地目录的代码,我想知道是否有办法使它连接到 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);
}
}
I have used this code but i cannot seem to get it to work its not coming up with an error but its not listing the files on the webserver either?
我已经使用了这段代码,但我似乎无法让它工作它没有出现错误但它也没有列出网络服务器上的文件?
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;
}
采纳答案by Robert Harvey
You can use this wrapper library.
您可以使用这个包装库。
The relevant code is:
相关代码是:
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();
}
回答by Terrii
I found the answer i did a little of experimenting and now its displaying the files in the listview, Thank you Robert Harvey?
我找到了我做了一些实验的答案,现在它在列表视图中显示文件,谢谢罗伯特哈维?
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;
}
回答by Chandresh Singh Rathore
This code can be used to get the list of files from the ftp
此代码可用于从 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();
}
回答by Christian Moser
Here is a nice helper to get all files and folders of an FTP directory:
这是获取 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();
}
}
}
}
}
Found here: http://www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c
在这里找到:http: //www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c
回答by Nilay Vishwakarma
You can use this method.
您可以使用此方法。
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();
}

