如何使用文件操作组织文件递归搜索?

时间:2017-02-15 08:49:58

标签: c++ winapi search recursion

我为自己编写了一个C ++中的小程序,它可以对它找到的文件(在我的过滤器中)执行一些操作,并且偶然发现了搜索文件的机制。在开始时,程序询问完整路径,然后按文件类型递归地在所选目录的所有子目录中查找它们。问题是执行操作后(循环fopen - operation - fclose)无法重命名或删除文件。该程序只是以代码0退出。我在文件搜索机制上犯了罪,因为该函数很可能在其实现时使用image,并且不删除或重命名该文件。我尝试了不同的选项来通过WinAPI,std(fstream)和fopen / fclose来管理文件。没有任何结果。

代码段:

int main() {

    char sPath[MAX_PATH] = "C:\\TmpDir";

    char sExt[10] = "doc";
    char sEXT[10] = "DOC";
    GetFileList(sPath, sExt, sEXT);

    printf("Results= %d\n", rez);
    system("pause");
    return 0;

}

void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT) {
    WIN32_FIND_DATA pFILEDATA;
    HANDLE hFile = FindFirstFile(strcat(sPath, "\\*.*"), &pFILEDATA);
    sPath[strlen(sPath) - strlen(strstr(sPath, "*.*"))] = '\0';
    if (hFile != INVALID_HANDLE_VALUE) {
        char * chBuf;
        do {
            if (strlen(pFILEDATA.cFileName) == 1 && strchr(pFILEDATA.cFileName, '.') != NULL)
                if (FindNextFile(hFile, &pFILEDATA) == 0)
                    break;
            if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName, "..") != NULL)
                if (FindNextFile(hFile, &pFILEDATA) == 0)
                    break;
            if (pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                GetFileList(strcat(sPath, pFILEDATA.cFileName), sExt, sEXT);
                sPath[strlen(sPath) - strlen(pFILEDATA.cFileName) - 1] = '\0';
            } else {
                if ((chBuf = strrchr(pFILEDATA.cFileName, '.'))) {
                    if (strstr(chBuf + 1, sExt) || strstr(chBuf + 1, sEXT)) {
                        CharToOem(sPath, sPath);
                        printf("%s", sPath);
                        OemToChar(sPath, sPath);
                        CharToOem(pFILEDATA.cFileName, pFILEDATA.cFileName);
                        printf("%s\n", pFILEDATA.cFileName);
                        /* Какая-то операция с файлом.
                        ...
                        Конец операции с файлом. */
                        rez++;
                    }
                }
            }
        } while (FindNextFile(hFile, &pFILEDATA));
    }
}

0 个答案:

没有答案