使用 WinSCP .NET/COM 使用临时文件名上传文件

2024-01-06

我正在用 C# 创建一个小型 .NET 应用程序来将文件上传到 FTP 服务器。我在执行此操作时使用了 WinSCP 的 .NET DLL,并且我一直在尝试找到解决问题的好方法。

我放置所有文件的 FTP 文件夹将由另一个应用程序监控。然后,该应用程序将获取这些文件并自动处理它们。

所以我想避免的是我的文件在传输完成之前被应用程序抓取。

因此,我想使用临时文件名用法或临时文件夹,然后在上传完成后移动文件。

您建议最好的方法是什么? 第二个问题是,在 WinSCP .NET 中应该有一个“传输恢复”选项,可以使用临时名称传输文件,并在完成后重命名。但我似乎无法让它发挥作用,并且正在寻找有关如何使其发挥作用的任何提示?


你是对的“转移到临时文件名” 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)了解隐藏上传文件的不同方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WinSCP .NET/COM 使用临时文件名上传文件 的相关文章

随机推荐