如何下载 FTP 服务器的最旧文件?
How can I download the oldest file of an FTP server?
如何下载 FTP 服务器上最早的文件?
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://192.168.47.1/DocXML");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("Igor", "");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string names = reader.ReadLine();
textBox12.Text = names;
How can I download the oldest file of an FTP server?
使用WebRequestMethods.Ftp.ListDirectoryDetails
这将发出 FTP LIST 命令,并请求在单个请求中获取有关文件的详细信息。但这并不能使事情变得简单,因为您将不得不解析这些行,而且它们没有标准格式。
根据 ftp 服务器,它可能 return 行格式如下:
08-10-11 12:02PM <DIR> Version2
06-25-09 02:41PM 144700153 image34.gif
06-25-09 02:51PM 144700153 updates.txt
11-04-10 02:45PM 144700214 digger.tif
或
d--x--x--x 2 ftp ftp 4096 Mar 07 2002 bin
-rw-r--r-- 1 ftp ftp 659450 Jun 15 05:07 TEST.TXT
-rw-r--r-- 1 ftp ftp 101786380 Sep 08 2008 TEST03-05.TXT
drwxrwxr-x 2 ftp ftp 4096 May 06 12:24 dropoff
甚至另一种格式。
这篇博客 post "Sample code for parsing FtpwebRequest response for ListDirectoryDetails" 提供了一个处理多种格式的示例。
如果您知道格式是什么,只需为其创建自定义最小行解析器即可。
使用WebRequestMethods.Ftp.ListDirectory
with WebRequestMethods.Ftp.GetDateTimestamp
这更容易,但缺点是它需要您提交多个请求才能找出目录条目的最后修改日期。
这将为您提供仅包含名称的文件和目录条目列表,这样更易于解析。
public static IEnumerable<string> ListDirectory(string uri, NetworkCredential credentials)
{
var request = FtpWebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = credentials;
using (var response = (FtpWebResponse)request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream, true))
{
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
}
然后对于每个文件,您可以通过为每个文件发出请求来获取最后修改日期:
public static DateTime GetLastModified(string fileUri, NetworkCredential credentials)
{
// error checking omitted
var request = FtpWebRequest.Create(fileUri);
request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
request.Credentials = credentials;
using (var response = (FtpWebResponse)request.GetResponse())
return response.LastModified;
}
现在您只需执行以下操作即可获取文件列表及其最后修改日期。
var credentials = new NetworkCredential("Igor", "");
var filesAndDates = ListDirectory("ftp://192.168.47.1/DocXML", credentials)
.Select(fileName => new {
FileName = fileName,
LastModified = GetLastModified("ftp://192.168.47.1/DocXML/" + fileName, credentials)
})
.ToList();
// find the oldest entry.
var oldest = filesAndDates.OrderBy(x => x.LastModified).FirstOrDefault();
如何下载 FTP 服务器上最早的文件?
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://192.168.47.1/DocXML");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("Igor", "");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string names = reader.ReadLine();
textBox12.Text = names;
How can I download the oldest file of an FTP server?
使用WebRequestMethods.Ftp.ListDirectoryDetails
这将发出 FTP LIST 命令,并请求在单个请求中获取有关文件的详细信息。但这并不能使事情变得简单,因为您将不得不解析这些行,而且它们没有标准格式。
根据 ftp 服务器,它可能 return 行格式如下:
08-10-11 12:02PM <DIR> Version2
06-25-09 02:41PM 144700153 image34.gif
06-25-09 02:51PM 144700153 updates.txt
11-04-10 02:45PM 144700214 digger.tif
或
d--x--x--x 2 ftp ftp 4096 Mar 07 2002 bin
-rw-r--r-- 1 ftp ftp 659450 Jun 15 05:07 TEST.TXT
-rw-r--r-- 1 ftp ftp 101786380 Sep 08 2008 TEST03-05.TXT
drwxrwxr-x 2 ftp ftp 4096 May 06 12:24 dropoff
甚至另一种格式。
这篇博客 post "Sample code for parsing FtpwebRequest response for ListDirectoryDetails" 提供了一个处理多种格式的示例。
如果您知道格式是什么,只需为其创建自定义最小行解析器即可。
使用WebRequestMethods.Ftp.ListDirectory
with WebRequestMethods.Ftp.GetDateTimestamp
这更容易,但缺点是它需要您提交多个请求才能找出目录条目的最后修改日期。
这将为您提供仅包含名称的文件和目录条目列表,这样更易于解析。
public static IEnumerable<string> ListDirectory(string uri, NetworkCredential credentials)
{
var request = FtpWebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = credentials;
using (var response = (FtpWebResponse)request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream, true))
{
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
}
然后对于每个文件,您可以通过为每个文件发出请求来获取最后修改日期:
public static DateTime GetLastModified(string fileUri, NetworkCredential credentials)
{
// error checking omitted
var request = FtpWebRequest.Create(fileUri);
request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
request.Credentials = credentials;
using (var response = (FtpWebResponse)request.GetResponse())
return response.LastModified;
}
现在您只需执行以下操作即可获取文件列表及其最后修改日期。
var credentials = new NetworkCredential("Igor", "");
var filesAndDates = ListDirectory("ftp://192.168.47.1/DocXML", credentials)
.Select(fileName => new {
FileName = fileName,
LastModified = GetLastModified("ftp://192.168.47.1/DocXML/" + fileName, credentials)
})
.ToList();
// find the oldest entry.
var oldest = filesAndDates.OrderBy(x => x.LastModified).FirstOrDefault();