Mar*_*oli 6 .net c# ftp ftpwebrequest
这是我的代码
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(FTPAddress);
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
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();
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我正在使用ListDirectoryDetails.
对于每一行directories,这是内容:
ftp://172.28.4.7//12-22-14 01:21PM 9075 fileName.xml
Run Code Online (Sandbox Code Playgroud)
我的问题是如何从这条线上获得时间?我应该解析字符串吗?我不这么认为,因为我读到LastModified有财产,但我不知道如何使用它.
请问你能帮帮我吗?
不幸的是,使用.NET框架提供的功能,没有真正可靠有效的方法来检索目录中所有文件的修改时间戳,因为它不支持FTP MLSD命令.该MLSD命令以标准化的机器可读格式提供远程目录的列表.RFC 3659标准化了命令和格式.
.NET框架支持的替代方案:
ListDirectoryDetails方法(FTP LIST命令)检索目录中所有文件的详细信息,然后处理FTP服务器特定格式的详细信息
DOS/Windows格式:用于解析WebRequestMethods.Ftp.ListDirectoryDetails的C#类FTP响应
*nix格式:解析FtpWebRequest ListDirectoryDetails行
GetDateTimestamp方法(FTP MDTM命令)单独检索每个文件的时间戳.一个优点是,该响应是由标准化RFC 3659到YYYYMMDDHHMMSS[.sss].缺点是您必须为每个文件发送单独的请求,这可能是非常低效的.此方法使用您提到的LastModified属性:
const string uri = "ftp://example.com/remote/path/file.txt";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("{0} {1}", uri, response.LastModified);
Run Code Online (Sandbox Code Playgroud)或者,您可以使用支持现代MLSD命令的第三方FTP客户端实现.
例如,WinSCP .NET程序集支持它.
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "username",
Password = "password",
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Get list of files in the directory
string remotePath = "/remote/path/";
RemoteDirectoryInfo directoryInfo = session.ListDirectory(remotePath);
foreach (RemoteFileInfo fileInfo in directoryInfo.Files)
{
Console.WriteLine("{0} {1}", fileInfo.Name, fileInfo.LastWriteTime);
}
}
Run Code Online (Sandbox Code Playgroud)
(我是WinSCP的作者)
尝试使用 MS 文档中的以下代码:
// Get the object used to communicate with the server.
Uri serverUri = new Uri("ftp://mypath/myfile.txt");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create (serverUri);
request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
FtpWebResponse response = (FtpWebResponse)request.GetResponse ();
DateTime lastModifiedDate = response.LastModified;
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse.lastmodified%28v=vs.110%29.aspx
您应该对每个文件执行此操作。要做到这一点,也并不简单。您必须解析目录列表响应的结果。
检查这个人是如何做到这一点的:从 WebRequestMethods.Ftp.ListDirectoryDetails 中提取文件名 您应该能够在读取的每一行上执行 foreach 。
| 归档时间: |
|
| 查看次数: |
11876 次 |
| 最近记录: |