我正在尝试加密特定文件夹中的所有文件,并且该文件夹有子文件夹,当我尝试打印它工作正常的所有文件但是当我尝试加密所有文件时,它继续加密同一文件并且再次
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
答案 0 :(得分:1)
我远非100%肯定,但我有一种感觉,当你在目录中创建一个新文件时,FindNextFile
会混淆并再次找到相同的文件名,因为它实际上并不是同一个文件。您可能需要收集目录中所有文件的列表并一次处理一个,或者保留已完成的列表并跳过已完成的文件。
答案 1 :(得分:0)
FindNextFile
调用可能会看到新出现的加密文件,因此您也会继续处理新文件。
由于您要为加密文件添加“.enc”扩展名,因此跳过已具有此扩展名的文件会相对简单。