如何在FTP服务器上获取文件的上次修改日期

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有财产,但我不知道如何使用它.

请问你能帮帮我吗?

Mar*_*ryl 7

不幸的是,使用.NET框架提供的功能,没有真正可靠有效的方法来检索目录中所有文件的修改时间戳,因为它不支持FTP MLSD命令.该MLSD命令以标准化的机器可读格式提供远程目录的列表.RFC 3659标准化了命令和格式.

.NET框架支持的替代方案:


或者,您可以使用支持现代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的作者)


rod*_*ogq 0

尝试使用 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.ListDirectoryDe​​tails 中提取文件名 您应该能够在读取的每一行上执行 foreach 。