目前,我正在使用 Renci SSH.NET 库通过 SFTP 将文件上传到 Unix 服务器。我不喜欢的一件事是,在上传文件后,创建日期和修改日期会更改为上传发生的时间。
我想保留源文件中的原始文件日期,可以吗?
目前,我正在使用 Renci SSH.NET 库通过 SFTP 将文件上传到 Unix 服务器。我不喜欢的一件事是,在上传文件后,创建日期和修改日期会更改为上传发生的时间。
我想保留源文件中的原始文件日期,可以吗?
SSH.NET 库不会自动为您执行此操作。您必须对其进行编码。
有SftpClient.SetLastWriteTime
和SftpClient.SetLastWriteTimeUtc
方法。但它们实际上还没有实施。
你可以这样编码:
SftpFileAttributes fileAttributes = client.GetAttributes(targetFile);
fileAttributes.LastWriteTime = File.GetLastWriteTime(sourceFile);
client.SetAttributes(targetFile, fileAttributes);
尽管由于 中缺少 UTC API,但SftpFileAttributes
如果客户端和服务器不在同一个时区,您可能会在正确设置时间戳时遇到问题。
有关更多详细信息,请参阅我的回答:
Modified date time changes when move a file from Windows to UNIX server using SSH.NET
或者使用另一个能够自动保存时间戳的 SFTP 库,最好是支持 UTC。
例如,WinSCP .NET 程序集会自动执行此操作。只需使用以下Session.PutFiles
方法:
session.PutFiles(sourceFile, targetFile).Check();
(我是WinSCP的作者)