判断文件是否为FTP服务器上的目录

Tell if a file is a directory on an FTP server

本文关键字:服务器 FTP 文件 是否 判断      更新时间:2023-10-16

我正在编写一个c++程序,该程序使用libcurl与Apache FtpServer接口。我最初使用LIST命令来获取目录的内容,但它给了我很多信息,我没有,但必须以任何方式进行解析,这会导致大量不必要的开销(尤其是当我处理数十万个文件时)。此外,我需要一个有效的时间戳,它给了我一个不包括年份的简写(所以在1月1日,我电脑上的所有文件与FTP服务器相比都显得过时了)。我的解决方案是使用NLST命令只获取名称,然后使用MDTM下载每个名称的时间戳。这非常有效,但后来我遇到了一个主要问题,无法判断文件是否是目录。

我认为最简单的方法是使用权限查看第一个标志是否设置为d。FTP似乎没有此功能。有没有一种简单的方法可以判断文件名是目录还是文件?

您可以尝试在文件上使用CWD命令来测试它是否是目录。但是失败可能意味着没有权限,所以你需要检查错误代码。例如:

ftp> cd atom.xml
550 Can't change directory to atom.xml: Not a directory

或者,您可以对要测试的文件再次使用NLST命令。如果它是一个普通文件,您只需取回文件名即可。否则,您将获得该目录的内容列表。

ftp> nlist atom.xml
200 PORT command successful
150 Connecting to port 53912
atom.xml
226 1 matches total
ftp> mkdir foo
257 "foo" : The directory was successfully created
ftp> nlist foo
200 PORT command successful
150 Connecting to port 53928
226 0 matches total