确定FTP路径是文件还是目录

时间:2017-09-22 09:18:06

标签: c++ winapi ftp

我必须修复遗留在遗留代码中的错误。此代码调用FtpFindFirstFileW来收集有关FTP服务器上文件的信息。然后使用InternetFindNextFile迭代文件,将信息放入向量并返回此向量。

然而,问题是传递给FtpFindFirstFileW的“路径”也可能是单个文件的路径。 FtpFindFirstFileW可以正常返回有关此单个文件的信息。但之后我认为没有可能可靠地获得文件的完整路径(即首先传递给FtpFindFirstFileW的路径)。 WIN32_FIND_DATA structure仅包含没有路径的文件名。

可以使用类似

的路径调用我的方法
  1. 空路径(例如当前目录中的列表文件)
  2. 路径/到/一些/子目录
  3. 路径/到/ file.txt的
  4. file.txt(例如只是文件名)
  5. 如果可能的话,我想改变这种方法,以降低破坏遗留代码的风险。

    WIN32_FIND_DATA FileData;
    FtpFindFirstFile(hFTP, Path.c_str(), &FileData, 0, 0);
    
    do
    {
        auto PathToFile = Path + FileData.cFileName; // wrong result if Path is full path to file (e.g. Path = path/to/file.txt and FileData.cFileName = file.txt)
        auto PathToFile = Path; // wrong result if Path is path to directory (e.g. Path = path/ and FileData.cFileName = file.txt)
        auto PathToFile = FileData.cFileName; // wrong result if Path path to directory (e.g. Path = path/ and FileData.cFileName = file.txt)
    } while(InternetFindNextFile(Hdl,&FileData));
    

    我没有看到方法来检查路径是目录/文件还是获取Windows-FTP-API中文件的完整路径。

    修改

    关于建议使用FileData.dwFileAttributes区分文件和目录的注释:

    如果我使用路径/foo/bar调用FtpFindFirstFile,我可能会使用FileData.cFilename = bar获得单个结果。如果FileData.dwFileAttributes未设置FILE_ATTRIBUTE_DIRECTORY位,我看不出有办法知道这是因为/file/bar是一个文件还是因为/file/bar是一个目录而且文件/foo/bar/bar

0 个答案:

没有答案