File io WinSCP会话::RemoveFiles-删除子目录中的指定文件

File io WinSCP会话::RemoveFiles-删除子目录中的指定文件,file-io,winscp,winscp-net,File Io,Winscp,Winscp Net,[问题]是否Session::RemoveFiles()删除源目录子目录中的文件?如果没有,如何实现这一能力 (请不要问我为什么将远程目录设置为/C/testTransfer/。该代码仅用于测试目的。) 我有一个使用WinSCP.Net汇编的SFTP程序。程序语言为C++/CLI。它会打开一个工作文件。该文件包含多行FTP指令 我必须处理的一种指令类型是从源目录传输*.txt。源目录可能包含子目录,子目录也可能包含.txt。传输成功后,删除源文件 我使用Session::GetFiles()进行

[问题]是否
Session::RemoveFiles()
删除源目录子目录中的文件?如果没有,如何实现这一能力

(请不要问我为什么将远程目录设置为
/C/testTransfer/
。该代码仅用于测试目的。)

我有一个使用WinSCP.Net汇编的SFTP程序。程序语言为C++/CLI。它会打开一个工作文件。该文件包含多行FTP指令

我必须处理的一种指令类型是从源目录传输
*.txt
。源目录可能包含子目录,子目录也可能包含
.txt
。传输成功后,删除源文件

我使用
Session::GetFiles()
进行传输。它可以将源中的所有
.txt
文件(
/C/testTransfer/*.txt
)甚至子目录(
/C/testTransfer/sub/*.txt
)中的文件正确传输到目标

transferOptions->FileMask=“*.txt”;
会话->获取文件(“/C/testTransfer”,“C:\\temp\\win”,false,transferOption);
现在要删除,我使用
session->RemoveFiles(“/C/testTransfer/*.txt”)
。我只在源代码(
/C/testTransfer/*.txt
)中看到
*.txt
,但在子目录(
/C/testTransfer/sub/*.txt
)中没有看到

通常可以删除子目录中的文件。但通配符不是这样,因为WinSCP不会下降到与通配符不匹配的子目录(
*.txt
)。还要注意的是,即使您不需要通配符,
Session::RemoveFiles
甚至会删除子目录本身,我不确定您是否希望它这样做

尽管您还有其他(更好=更安全)选项:

  • 使用的指示在成功传输后删除源文件

  • 如果需要以事务方式删除源文件(=仅在所有文件下载成功后),请迭代由
    Session::GetFiles
    返回的,并为每个文件调用
    Session::RemoveFiles
    (除非
    transferventargs::Error
    不为空)

    使用
    transferventargs::FileName
    获取要传递到
    会话::RemoveFiles
    的文件路径。在将文件名传递到
    会话::RemoveFiles
    之前,请使用转义文件名

    有一个类似的完整示例可供选择

  • 要在独立操作中递归删除与通配符匹配的文件(而不是在下载相同的文件之后),请使用。将通配符传递给它的
    掩码
    参数。使用
    枚举选项.AllDirectories
    选项进行递归

    为每个返回的文件调用
    会话::RemoveFiles
    。在将文件名传递到
    会话::RemoveFiles
    之前,请使用转义文件名