【问题标题】:FTP How to delete a folder?FTP 如何删除文件夹?
【发布时间】:2015-09-03 08:10:59
【问题描述】:

在 MFC VC++ 的 FTP 客户端应用程序中,我列出了服务器的目录文件并成功删除它们。 LISTNLIST 命令在列出目录文件/内容时工作正常。

除了文件,两个文件夹(包含未列出的文件)出现在正确的列表中。但是,当我将 DELE 命令传递给这些文件夹时,会返回错误并且文件夹仍然存在。我觉得这是因为它们是文件夹。

下面是我实现的Delete()函数:

int CFTPClient::Delete(const tstring& strFile) const
{
   ASSERT( !strFile.empty() );
   CReply Reply;
   if( !SendCommand(CCommand::DELE(), strFile, Reply) )
       return FTP_ERROR;
   return SimpleErrorCheck(Reply);
}

我的问题是:FTP 中是否有删除/删除文件夹的命令?我指的是 RFC 959 FTP 协议。 DELERMD 命令不适用于文件夹。

【问题讨论】:

  • 为什么RMD 不起作用? "此命令将路径名中指定的目录作为目录删除"
  • “返回错误” - 哪个错误?无论如何,首先尝试对文件夹的文件进行 DELE,然后对文件夹本身尝试 RMD。
  • 使用 RMD 和 DELE 时,WireShark 上出现“521 删除目录时出错”和“521 删除文件时出错”... NLIST 列出了目录文件和文件夹,但文件夹内容我无法访问...有什么想法可以以某种方式访问​​或“打开”文件夹吗?

标签: c++ ftp


【解决方案1】:

RMD 命令通常只能删除一个空目录。

首先,您必须在发出RMD 命令之前递归删除目录内容。

另见FTP Protocol and Deleting Directories

【讨论】:

  • 是的,我递归地删除了目录中所有工作正常的文件。但是,这两个文件夹不会被删除,因为 DELE 不会删除它们。
  • 您必须在目录上使用RMD,而不是DELE。您可以使用 GUI FTP 客户端删除文件夹吗?
  • 我一直在使用 SmartFTP 客户端,但它不提供删除目录内容的选项...您知道列出目录中文件夹内容/文件的命令吗?
  • 我现在无法尝试,但我怀疑 SmartFTP 无法递归删除目录。您可以尝试 WinSCP 或其他 FTP 客户端并向我们展示其日志吗?要列出目录内容,请使用NLST
  • 是 WinSCP 使用 LIST 列出目录(“\”)内容和 CWD 来打开文件夹或更改目录(即 CWD \IMAGES)。但是,当我尝试删除 images 文件夹中的文件时,WireShark 中出现了相同的 521 错误。 DELE 也不起作用。非常令人沮丧。感谢您的帮助。