从 Web 上的 FTP 文件夹(端口 80)获取列表到数组
Get a list from FTP folder on web (port 80) to array
我正在尝试通过端口 80 从 FTP 网络文件夹获取文件列表到数组或列表中,然后下载特定扩展,但由于某种原因计数器始终为零。
public void GetFilesFromServer(string url, string extension=".mp3")
{
List<string> files = new List<string>();
try
{
//Create FTP request
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(url);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("anonymous", "anonymous");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
{
files.Add(reader.ReadLine());
}
//Clean-up
reader.Close();
responseStream.Close(); //redundant
response.Close();
}
catch (Exception)
{
// MessageBox.Show("There was an error connecting to the FTP Server");
}
//If the list was successfully received, display it to the user
//through a dialog
if (files.Count != 0)
{
string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadedFiles");
WebClient wc = new WebClient();
foreach (string file in files)
{
if(file.EndsWith(extension))
wc.DownloadFile(url+"/"+file, Path.Combine(folderPath, file));
}
}
}
我的目标是将所有.ext 文件放入一个数组中,但我无法获取列表
例如文件夹是http://url.com/folder。
但是请求失败
我检查了解决方案,但它对我不起作用。
MS 文档说 FtpWebRequest 初始化了一个新的 WebRequest,根据此处的文档:https://msdn.microsoft.com/en-us/library/bw00b1dc(v=vs.110).aspx
然后如果 URL 以 "http://" 开头,您将返回一个 HttpWebRequest 而不是 FtpWebRequest。
这个答案可以解释:
FtpWebRequest
用于 FTP 协议。
FTP 协议不使用端口 80.
如果您的 URL 是服务器上文件夹的 HTML 表示,则您无法使用 FtpWebRequest
抓取它。您必须解析 HTML.
虽然你最好找到一种使用更可靠的方法访问数据的方法(例如使用真实的FTP)。
我正在尝试通过端口 80 从 FTP 网络文件夹获取文件列表到数组或列表中,然后下载特定扩展,但由于某种原因计数器始终为零。
public void GetFilesFromServer(string url, string extension=".mp3")
{
List<string> files = new List<string>();
try
{
//Create FTP request
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(url);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("anonymous", "anonymous");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
{
files.Add(reader.ReadLine());
}
//Clean-up
reader.Close();
responseStream.Close(); //redundant
response.Close();
}
catch (Exception)
{
// MessageBox.Show("There was an error connecting to the FTP Server");
}
//If the list was successfully received, display it to the user
//through a dialog
if (files.Count != 0)
{
string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadedFiles");
WebClient wc = new WebClient();
foreach (string file in files)
{
if(file.EndsWith(extension))
wc.DownloadFile(url+"/"+file, Path.Combine(folderPath, file));
}
}
}
我的目标是将所有.ext 文件放入一个数组中,但我无法获取列表
例如文件夹是http://url.com/folder。
但是请求失败
我检查了解决方案,但它对我不起作用。
MS 文档说 FtpWebRequest 初始化了一个新的 WebRequest,根据此处的文档:https://msdn.microsoft.com/en-us/library/bw00b1dc(v=vs.110).aspx
然后如果 URL 以 "http://" 开头,您将返回一个 HttpWebRequest 而不是 FtpWebRequest。
这个答案可以解释:
FtpWebRequest
用于 FTP 协议。
FTP 协议不使用端口 80.
如果您的 URL 是服务器上文件夹的 HTML 表示,则您无法使用 FtpWebRequest
抓取它。您必须解析 HTML.
虽然你最好找到一种使用更可靠的方法访问数据的方法(例如使用真实的FTP)。