在 C++ 中读取所有文件由 . 文件夹

Zombie_Pigdragon

我想创建一个循环遍历给定文件夹(在大多数情况下为 C:)的 C++ 项目,并提供名称和/或任何给定属性的列表。我使用 FindFirstFile() 进行了成功循环,但是在第一次递归之后,我不可避免地进入了一个循环,其中我的路径变为 C:\$GetCurrent..... 直到 strcpy 放弃。代码是

// LoopFiles.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <ShellAPI.h>
#include <fstream>
#include <strsafe.h>

void FindAllFiles(LPCSTR path);

int main()
{
    FindAllFiles("C:");
    return 0;
}

void FindAllFiles(LPCSTR path) {
     LPWIN32_FIND_DATAA data = new WIN32_FIND_DATAA();
     char searchPath[MAX_PATH] = "";
     HANDLE hFind = INVALID_HANDLE_VALUE;

     strcpy_s(searchPath, path);
     strcat_s(searchPath, "\\*");

     hFind = FindFirstFileA(searchPath, data);

     do {

        if (INVALID_HANDLE_VALUE == hFind)
        {
             continue;
        }

         if (data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
            strcpy_s(searchPath, path);
            strcat_s(searchPath, "\\");
            strcat_s(searchPath, data->cFileName);
            FindAllFiles(searchPath);
         }
         else {
             std::cout << data->cFileName;
        }
    } while (FindNextFileA(hFind, data));

}

显然,这段代码在 Windows 上运行。我能做些什么来防止这个错误发生?

斯拉瓦

排除名称为“.”的目录 (当前目录)和“..”(父目录)从搜索,可能的解决方案:

if( data->cFileName[0] == '.' and ( data->cFileName[1] == 0 or 
        ( data->cFileName[1] == '.'  and data->cFileName[2] == 0 ) ) )
    continue;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用C读取文件夹中的所有文件

C# sharepoint 循环遍历文件夹和所有子文件夹中的所有文件

遍历文件夹中的文件(C ++)

如何删除所有文件/文件夹,但将根文件夹保留在C#中

C#Sharepoint.Client-返回给定子文件夹中的所有文件和文件夹

在 C# 中复制除某些文件夹和文件之外的所有文件夹

C ++中的递归文件夹扫描

列出目录C +中的文件夹

读取文件夹C#中的最新文档

C#返回位于其中具有文件夹的目录中的所有文件

使用 C# 在线列出 Sharepoint 上文件夹中的所有文件

Qt C++:包括项目文件夹中的所有库文件

如何包含文件夹中的所有源文件?(C ++,MS VS 2013)

如何从C#中的文件夹中选择所有xml文件并解析它们

编译C时如何链接文件夹中的所有目标文件?

C ++控制台中的星号列出了文件夹中的所有文件,为什么?

获取tar -C指定文件夹中的所有文件

从 C++ 中父文件夹的父文件夹中获取文件位置

列出C中给定路径中的文件夹,子文件夹和文件(Windows)

逐行读取文件夹中的所有.txt文件

如何从Java读取文件夹中的所有文件?

从文件夹中读取所有.txt文件?

如何随机读取文件夹中的所有文件

C ++编程的文件夹结构

C#添加文件夹资源?

访问文件夹拒绝的C#

如何使用C ++打开文件夹

从Outlook中的共享文件夹中读取带有C#的电子邮件

读取文件夹和子文件夹中的所有文件-进度和大小