2

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

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

4

1 回答 1

5

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

SftpClient.SetLastWriteTimeSftpClient.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的作者)

于 2016-04-15T06:18:41.247 回答