gpt4 book ai didi

c# - .NET FTP 上传文件并保留原始日期时间

转载 作者:行者123 更新时间:2023-11-30 20:38:36 31 4
gpt4 key购买 nike

我们有一个 Windows 2008 R2 Web 服务器,带有 FTP over SSL。此应用程序使用 .NET 4.5,当我上传文件时,文件上的日期/时间更改为服务器上的当前日期/时间。有没有办法让上传的文件保留原始(最后修改)日期?

这是我的:

FtpWebRequest clsRequest = (FtpWebRequest)WebRequest.Create(FTPFilePath);
clsRequest.EnableSsl = true;
clsRequest.UsePassive = true;
clsRequest.Credentials = new NetworkCredential(swwwFTPUser, swwwFTPPassword);
clsRequest.Method = WebRequestMethods.Ftp.UploadFile;
Byte[] bFile = File.ReadAllBytes(LocalFilePath);
Stream clsStream = clsRequest.GetRequestStream();
clsStream.Write(bFile, 0, bFile.Length);
clsStream.Close();
clsStream.Dispose();
clsRequest = null;

最佳答案

确实没有通过 FTP 协议(protocol)更新远程文件时间戳的标准方法。这可能就是 FtpWebRequest 不支持它的原因。

有两种非标准的方式来更新时间戳。非标准的 MFMT 命令:

MFMT yyyymmddhhmmss path

或非标准使用(否则为标准)MDTM 命令:

MDTM yyyymmddhhmmss path

但是 FtpWebRequest 也不允许您发送自定义命令。

参见示例 How to send arbitrary FTP commands in C# .


所以你必须使用第 3 方 FTP 库。

例如WinSCP .NET assembly默认情况下保留上传文件的时间戳。

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
};

using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);

// Upload
session.PutFiles(@"c:\toupload\file.txt*", "/home/user/").Check();
}

参见 a full example .

请注意,WinSCP .NET 程序集不是 native .NET 程序集。它是一个围绕控制台应用程序的薄 .NET 包装器。

(我是 WinSCP 的作者)

关于c# - .NET FTP 上传文件并保留原始日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35026243/

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