SSH.NET:是否可以使用SFTP上传文件并保留源文件中的文件日期?

目前,我使用Renci SSH.NET库使用SFTP将文件上传到Unix服务器。 我不喜欢的一件事是,在上传文件后,创建和修改日期会更改为上传时间。

我想保留源文件中的原始文件日期,这可能吗?

SSH.NET库不会自动为您执行此操作。 你必须编码。

SftpClient.SetLastWriteTimeSftpClient.SetLastWriteTimeUtc方法。 但它们实际上还没有实现。

你可以这样编码:

 SftpFileAttributes fileAttributes = client.GetAttributes(targetFile); fileAttributes.LastWriteTime = File.GetLastWriteTime(sourceFile); client.SetAttributes(targetFile, fileAttributes); 

虽然由于SftpFileAttributes缺少UTC API,但如果客户端和服务器不在同一时区,则可能无法正确设置时间戳。


有关详细信息,请参阅我的回答:
使用SSH.NET将文件从Windows移动到UNIX服务器时,修改日期时间会更改


或者使用另一个能够自动保留时间戳的SFTP库,理想情况下支持UTC。

例如, WinSCP .NET程序集会自动执行此操作。 只需使用Session.PutFiles方法 :

 session.PutFiles(sourceFile, targetFile).Check(); 

(我是WinSCP的作者)