使用带有临时文件名的 WinSCP .NET/COM 上传文件
本文关键字:NET COM 文件 WinSCP 文件名 | 更新日期: 2023-09-27 18:31:17
我正在用C#创建一个小型.NET应用程序,用于将文件上传到FTP服务器。我在执行此操作时正在使用WinSCP的.NET DLL,我一直在努力找到解决问题的好方法。
我将放置所有文件的FTP文件夹将由另一个应用程序监视。然后,此应用程序将获取这些文件并自动处理它们。
因此,我想避免的是,在传输完成之前,我的文件被应用程序抓取。
所以我想使用临时文件名用法或临时文件夹,然后在上传完成后移动文件。
您建议的最佳方法是什么?第二个问题是,在WinSCP .NET中,应该有一个传输恢复选项,该选项使用临时名称传输文件,并在完成后重命名。但我似乎无法让它工作,并且正在寻找有关如何使其工作的任何提示?
你是对的,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
在 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);
}
上传/上传到临时文件名时锁定文件一文中还有一个完整的 PowerShell 示例。
另请参阅 SFTP 文件锁定机制(也适用于 FTP),了解隐藏正在上传的文件的不同方法。