【发布时间】:2012-06-01 22:34:41
【问题描述】:
使用 WinSCP 的 .NET 程序集上传文件。 OperationResultBase.Check() 抛出以下错误:
WinSCP.SessionRemoteException:传输已成功完成,但无法将临时传输文件“testfile.zip.filepart”重命名为目标文件名“testfile.zip”。如果问题仍然存在,您可能需要关闭传输恢复支持。
我尝试发送的任何 zip 文件似乎都会发生这种情况。如果有所不同,这些是使用 DotNetZip 库创建的 zip 文件。
我正在使用的代码,几乎直接取自 WinSCP 文档中的示例:
public void uploadFile(string filePath, string remotePath)
{
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
transferResult = currentSession.PutFiles(filePath, remotePath, false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
}
}
Discussion over at the WinSCP forum 表示程序集还不允许对传输恢复支持进行编程控制。有解决办法吗?
【问题讨论】:
-
上传使用的文件名与实际所需的文件名不同,这对我来说似乎很奇怪。你有控制权吗?
-
@sarnold,来自 WinSCP 文档:“使用 SFTP 协议传输文件时,首先将其传输到具有 .filepart 扩展名的临时文件中。只有在传输完成后,才会删除扩展名。”
-
如果您可以访问服务器,是否可以从 SysInternals 运行进程监视器之类的东西,以查看文件上传完成时会发生什么。例如,防病毒程序可能会在文件关闭时开始扫描文件,并在尝试重命名时仍在访问文件。
-
@sgmoore,很遗憾我没有服务器访问权限。
-
赏金文本中有错字。而不是“C#的.NET程序集”,它应该说“WinSCP的.NET程序集”。 ——来自印记。抱歉,如果不删除它就无法编辑它。
标签: c# sftp scp winscp winscp-net