目前,我正在使用Renci SSH.NET库使用SFTP将文件上传到Unix服务器。我不喜欢的一件事是,在上传文件后,创建和修改日期会更改为上传时间。
我想保留源文件中的原始文件日期,这可能吗?
答案 0 :(得分:4)
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的作者)