6

使用 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);
    }
}

WinSCP 论坛上的讨论表明该程序集还不允许对传输恢复支持进行编程控制。有解决方法吗?

4

3 回答 3

4

听起来好像文件上传到的目标服务器上的文件系统不允许文件更改权限。这可能会导致在上传完成时重命名文件失败,尽管整个文件已上传并使用传输过程中使用的临时文件名写入文件系统。如果您没有对目标服务器的管理访问权限,则可以通过尝试重命名目标服务器上已经存在的文件来进行测试。如果这也失败了,那么您将需要更改目标服务器上的适当权限才能使其正常工作。

于 2012-06-01T22:40:22.140 回答
1

关闭简历支持:

put *.txt -nopreservetime -nopermissions -resumesupport=off
于 2015-04-08T02:05:01.793 回答
1

如果您包含完整的错误消息,包括服务器返回的根本原因,这将有所帮助。

我的猜测是服务器端正在运行一个防病毒应用程序(或类似应用程序)。上传完成后,防病毒应用程序会检查任何文件。这与上传完成后 WinSCP 尝试重命名文件相冲突。对于 .ZIP 档案,问题可能更频繁地发生,或者因为它们往往更大,或者仅仅因为它们需要在检查之前被提取(这需要时间)。

无论如何,您可以使用TransferOptions.ResumeSupport.

另请参阅错误消息“传输已成功完成,但临时传输文件...无法重命名为目标文件名...”的文档

于 2014-04-22T15:02:45.307 回答