gpt4 book ai didi

c# - 如何获取FTP服务器上文件的最后修改日期

转载 作者:太空狗 更新时间:2023-10-29 21:27:28 29 4
gpt4 key购买 nike

这是我的代码

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();
}

如您所见,我正在使用 ListDirectoryDe​​tails

对于目录中的每一行,这是内容:

ftp://172.28.4.7//12-22-14  01:21PM                 9075 fileName.xml

我的问题是如何从该行获取时间?我应该解析字符串吗?我不这么认为,因为我读到有 LastModified 属性,但我不知道如何使用它。

你能帮帮我吗?

最佳答案

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

.NET 框架支持的您可以使用的替代方案:

  • ListDirectoryDe​​tails 方法(FTP LIST 命令)检索目录中所有文件的详细信息,然后您处理 FTP 服务器特定格式的详细信息

    DOS/Windows 格式:C# class to parse WebRequestMethods.Ftp.ListDirectoryDetails FTP response
    *nix 格式:Parsing FtpWebRequest ListDirectoryDetails line

  • GetDateTimestamp 方法(FTP MDTM 命令)单独检索每个文件的时间戳。一个优点是响应由 RFC 3659 标准化到 YYYYMMDDHHMMSS[.sss]。一个缺点是您必须为每个文件发送一个单独的请求,这可能是非常低效的。此方法使用 LastModified property你提到的:

      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);

或者,您可以使用支持现代 MLSD 命令的第 3 方 FTP 客户端实现。

例如WinSCP .NET assembly支持这一点。

// 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);
}
}

(我是 WinSCP 的作者)

关于c# - 如何获取FTP服务器上文件的最后修改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27604772/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com