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

Eri*_*rik 2 c# ssh sftp file-upload ssh.net

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

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

Mar*_*ryl 5

SSH.NET库不会自动为您完成此操作。您必须对其进行编码。

SftpClient.SetLastWriteTimeSftpClient.SetLastWriteTimeUtc方法。但是它们实际上尚未实现。

您可以这样编码:

SftpFileAttributes fileAttributes = client.GetAttributes(targetFile);
fileAttributes.LastWriteTime = File.GetLastWriteTime(sourceFile);
client.SetAttributes(targetFile, fileAttributes);
Run Code Online (Sandbox Code Playgroud)

尽管由于中没有UTC API,但SftpFileAttributes如果客户端和服务器不在同一时区,则可能无法正确设置时间戳。


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


或使用另一个能够自动保留时间戳的SFTP库,最好是具有UTC支持。

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

session.PutFiles(sourceFile, targetFile).Check();
Run Code Online (Sandbox Code Playgroud)

(我是WinSCP的作者)