你是对的“转移到临时文件名” https://winscp.net/eng/docs/resume#automaticWinSCP 的功能看起来是不错的选择。
它使 WinSCP 上传文件.filepart
附加到其名称中,完成后删除扩展名。
TransferOptions transferOptions = new TransferOptions();
transferOptions.ResumeSupport.State = TransferResumeSupportState.On;
session.PutFiles(@"d:\toupload\myfile.dat", "/home/user/", false, transferOptions).Check();
尽管仅支持 SFTP 协议。
使用 FTP 协议时,您必须手动执行此操作。
session.PutFiles(@"d:\toupload\myfile.dat", "/home/user/myfile.dat.filepart").Check();
session.MoveFile("/home/user/myfile.dat.filepart", "/home/user/myfile.dat");
如果您要上传多个文件,则可以使用操作面罩 https://winscp.net/eng/docs/operation_mask,并迭代返回的成功上传文件列表Session.PutFiles https://winscp.net/eng/docs/library_session_putfiles in TransferOperationResult https://winscp.net/eng/docs/library_transferoperationresult,调用Session.MoveFile https://winscp.net/eng/docs/library_session_movefile对于每个。
TransferOperationResult transferResult;
transferResult = session.PutFiles(@"d:\toupload\*.dat", "/home/user/*.filepart")
// Throw on any error
transferResult.Check();
// Rename uploaded files
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
string finalName = transfer.Destination.Replace(".filepart", ".dat");
session.MoveFile(transfer.Destination, finalName);
}
文章中还有一个完整的 PowerShell 示例上传时锁定文件/上传到临时文件名 https://winscp.net/eng/docs/script_locking_files_while_uploading.
也可以看看SFTP文件锁定机制 https://stackoverflow.com/q/26932341/850848(也适用于 FTP)了解隐藏上传文件的不同方法。