FindFirstFile在加密时继续运行相同的文件

时间:2013-09-10 10:52:34

标签: c++ windows encryption msdn

我正在尝试加密特定文件夹中的所有文件,并且该文件夹有子文件夹,当我尝试打印它工作正常的所有文件但是当我尝试加密所有文件时,它继续加密同一文件并且再次

void dirListFiles(wchar_t *startDir) {
HANDLE hFind;
WIN32_FIND_DATA wfd;
wchar_t path[99999];
char *enName;
const char *extension = ".enc";
int wcsChars;

wsprintf(path, L"%s\\*", startDir);

if ((hFind = FindFirstFile(path, &wfd)) == INVALID_HANDLE_VALUE) {
    return;
}

do {
    if ((wcsncmp(L".", wfd.cFileName, 1) !=0) && (wcsncmp(L"..", wfd.cFileName, 2) != 0) ) {
        wsprintf(path, L"%s\\%s", startDir, wfd.cFileName);
        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
            dirListFiles(path);
        } else {
            wcsChars = wcslen(path);
            char *szTo = new char[wcsChars + 1];
            szTo[wcsChars] = '\0';
            WideCharToMultiByte(CP_ACP, 0, path, -1, szTo, wcsChars, NULL, NULL);

            enName = (char *)malloc(strlen(szTo) + 1 + 4);
            strcpy(enName, szTo);
            strcat(enName, extension);
            // If i add this line it keeps on encrypting the same file
            //fencrypt(szTo, enName, (unsigned const char*)"1234567812345678");

            printf("%s\n", enName);

            delete[] szTo;
            free(enName);
        }
    }
} while(FindNextFile(hFind, &wfd));

if (GetLastError() != ERROR_NO_MORE_FILES) {
    FindClose(hFind);
    return;
}
}

如果我添加fencrypt(szTo,enName,(unsigned const char *)“1234567812345678”);然后它加密主文件夹G:\WinApp中的文件,但当它进入G:\WinApp\ipch\winapp-1918e0a3时,它会一次又一次地加密同一个文件,G:\WinApp\ipch\只有一个文件夹{{} 1}}这是我的加密功能,请告诉我哪里错了

winapp-1918e0a3

2 个答案:

答案 0 :(得分:1)

我远非100%肯定,但我有一种感觉,当你在目录中创建一个新文件时,FindNextFile会混淆并再次找到相同的文件名,因为它实际上并不是同一个文件。您可能需要收集目录中所有文件的列表并一次处理一个,或者保留已完成的列表并跳过已完成的文件。

答案 1 :(得分:0)

FindNextFile调用可能会看到新出现的加密文件,因此您也会继续处理新文件。

由于您要为加密文件添加“.enc”扩展名,因此跳过已具有此扩展名的文件会相对简单。