你是对的,WinSCP 的“传输到临时文件名”功能看起来像是要走的路。
它使 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");
如果要上传多个文件,可以使用操作掩码,并迭代Session.PutFiles
in返回的成功上传文件列表,为每个文件TransferOperationResult
调用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);
}
在Locking files while uploading / Upload to temporary file name一文中还有一个完整的 PowerShell 示例。
另请参阅SFTP 文件锁定机制(也适用于 FTP),了解隐藏上传文件的不同方法。