【发布时间】:2016-08-06 22:41:12
【问题描述】:
目前,我正在使用 Renci SSH.NET 库通过 SFTP 将文件上传到 Unix 服务器。我不喜欢的一件事是,在上传文件后,创建日期和修改日期会更改为上传发生的时间。
我想保留源文件中的原始文件日期,可以吗?
【问题讨论】:
标签: c# file-upload ssh sftp ssh.net
目前,我正在使用 Renci SSH.NET 库通过 SFTP 将文件上传到 Unix 服务器。我不喜欢的一件事是,在上传文件后,创建日期和修改日期会更改为上传发生的时间。
我想保留源文件中的原始文件日期,可以吗?
【问题讨论】:
标签: c# file-upload ssh sftp ssh.net
SSH.NET 库不会自动为您执行此操作。您必须对其进行编码。
有SftpClient.SetLastWriteTime 和SftpClient.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 的作者)
【讨论】:
SftpSession.RequestLStat 是如何实现的。删除WaitOnHandle 并适当替换它以进行并行处理。