c# - 使用带有临时文件名的 WinSCP .NET/COM 上传文件

标签 c# ftp temporary-files winscp-net

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

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

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

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

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

最佳答案

你是对的 "transfer to temporary file name" WinSCP 的功能看起来像是要走的路。

它使 WinSCP 上传文件时在其名称后附加 .filepart,完成后删除扩展名。

TransferOptions transferOptions = new TransferOptions();
transferOptions.ResumeSupport.State = TransferResumeSupportState.On;
session.PutFiles(@"d:\toupload\myfile.dat", "/home/user/", false, transferOptions).Check();

虽然只有 SFTP 协议(protocol)支持它。


使用 FTP 协议(protocol),您必须手动执行此操作。

session.PutFiles(@"d:\toupload\myfile.dat", "/home/user/myfile.dat.filepart").Check();
session.MoveFile("/home/user/myfile.dat.filepart", "/home/user/myfile.dat");

如果您要上传多个文件,您可以使用 operation mask , 并迭代 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);
}

文章 Locking files while uploading / Upload to temporary file name 中还有一个完整的 PowerShell 示例.


另见 SFTP file lock mechanism (也适用于 FTP)用于隐藏正在上传的文件的不同方法。

关于c# - 使用带有临时文件名的 WinSCP .NET/COM 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041606/

相关文章:

c# - 如何通过 ViewModel 控制 View VisualState

c# - 将 JS 日期解析为 C# DateTime

iphone - 如果服务器上更新,则通过 FTP 下载到 iphone

python - 使用 python-future 解码 Python 2 `tempfile`

c# - 临时文件保存的时间长度?

c# - 为什么客户端 Blazor 使用 .NET Standard 2.0 以及如何将 .NET Core 3.0 与 Blazor 一起使用?

c# - 带有(一点点)Unity 3D 的 iOS 项目?

Python FTP 目录列表挂起

windows - 如果防火墙打开,Java 7 会阻止 Windows Vista 和 7 上的 FTP 传输。有任何想法吗?

python - 创建一个唯一的文件系统路径,没有任何实际文件