C# 使用WinSCP.NET程序集仅删除或移动使用SFTP协议的选定文件

C# 使用WinSCP.NET程序集仅删除或移动使用SFTP协议的选定文件,c#,sftp,file-rename,winscp,winscp-net,C#,Sftp,File Rename,Winscp,Winscp Net,我正在尝试开发一个简单的SFTP文件传输项目,包括以下操作 上载 下载 在远程服务器中移动文件 删除文件 在session.PutFiles中上载时,我们有一个名为transferOptions.FileMask的属性来过滤文件 但是我在session.MoveFile和session.RemoveFiles中没有看到任何类似的内容 我的问题是,如果我只需要移动/删除选定的文件,我应该怎么做? 因此,您可以: session.RemoveFiles("/home/user/*.txt"); 这

我正在尝试开发一个简单的SFTP文件传输项目,包括以下操作

上载 下载 在远程服务器中移动文件 删除文件 在session.PutFiles中上载时,我们有一个名为transferOptions.FileMask的属性来过滤文件

但是我在session.MoveFile和session.RemoveFiles中没有看到任何类似的内容

我的问题是,如果我只需要移动/删除选定的文件,我应该怎么做?

因此,您可以:

session.RemoveFiles("/home/user/*.txt");
这和这个一样。实际上,用于高级选择,例如当您希望递归选择文件时,或当您希望排除某些类型的文件时

session.PutFiles(@"c:\toupload\*.txt", "/home/user/");
使用TransferOption.FileMask,WinSCP将递归地上载所有匹配的文件。虽然使用简单的文件掩码作为.PutFiles的参数,但它不是递归的

实际上,在其第一个参数中也支持文件掩码,尽管它是一个未记录的特性

正确的方法是列出远程目录,选择所需的文件,并为每个文件调用Session.MoveFile


看。这是一个PowerShell示例,但将其映射到C应该很容易。

@MartinPrikryl不是一下子就能做到的。我只需要在选定的文件中执行操作,仅此而已。对于帮助@MartinPrikryl,删除文件工作得非常好。但在移动文件时会抛出异常session.MoveFile/upload/Folder1、/upload/Folder1/Archive;该命令没有意义,您正在将文件夹移动到其自己的子文件夹中,这是不可能的。我假设您实际上想要将文件从该文件夹而不是文件夹本身移动到其子文件夹中。这将是session.MoveFile/upload/Folder1/*,/upload/Folder1/Archive/注意后面的斜杠。尽管这会尝试将归档文件夹移动到自身,但这会再次失败。如果您可以使用扩展名选择文件以将其与文件夹区分开来,请执行此操作。如果没有,你必须使用我在回答中建议的解决方案。谢谢Martin的帮助。发布这个问题后,我很快就找到了解决方案:根据文档,语法是MoveFilestring sourcePath,string targetPath我想应该是MoveFilestring fileName,string targetPath,因为它对我有用。我试图将文件一个接一个地移动到子文件夹中,您发现sourcePath有什么让人困惑的地方?我只将源路径指定为/upload/Folder1/