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

时间:2016-04-15 05:37:11

标签: c# file-upload ssh sftp ssh.net

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

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

1 个答案:

答案 0 :(得分:4)

SSH.NET库不会自动为您完成。你必须编码。

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

你可以这样编码:

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

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

有关详细信息,请参阅我的回答:
Modified date time changes when moving a file from Windows to UNIX server using SSH.NET

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

例如,WinSCP .NET assembly会自动执行此操作。只需使用Session.PutFiles method

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

(我是WinSCP的作者)

相关问题