Си под WinAPI. Процессы и потоки(дополнить существующий код)

500 руб. за проект
01 декабря 2022, 23:16 • 2 отклика • 40 просмотров
Изменить код таким образом, чтобы каждый каталог обрабатывался отдельным потоком (в среде Windows). Вот код:
#include <stdio.h>
#include <windows.h>
#include <shlwapi.h>
#include <tchar.h>
#include <strsafe.h>
#pragma warning(disable : 4996)

#define FOLDER "D:\\work\\testing"

static DWORD ListOfFiles(LPCTSTR pszPath)
{
WIN32_FIND_DATA FindFileData;
TCHAR szFileBuffer[MAX_PATH];
TCHAR szPathBuffer[MAX_PATH];
DWORD dwCount = 0;
HANDLE hFind;
INT iTemp;

StringCchCopy(szPathBuffer, MAX_PATH, pszPath);
StringCchCat(szPathBuffer, MAX_PATH, TEXT("\\*"));

hFind = FindFirstFile(szPathBuffer, &FindFileData);

if (hFind != INVALID_HANDLE_VALUE)
{
PathRemoveFileSpec(szPathBuffer);

do
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (FindFileData.cFileName[0] == TEXT('.'))
continue;

PathCombine(
FindFileData.cFileName, szPathBuffer,
FindFileData.cFileName
);

dwCount += ListOfFiles(FindFileData.cFileName);
}
else
{
if (StrToIntEx(FindFileData.cFileName, 0, &iTemp))
{
StringCchPrintf(
szFileBuffer, MAX_PATH, TEXT("%s\\%x"),
szPathBuffer, iTemp
);

PathCombine(
FindFileData.cFileName, szPathBuffer,
FindFileData.cFileName
);

if (MoveFile(FindFileData.cFileName, szFileBuffer))
{
_tprintf(
TEXT("File '%s' renamed successfully!\n"),
PathFindFileName(FindFileData.cFileName)
);

dwCount++;
}
}
}
}
while (FindNextFile(hFind, &FindFileData));

FindClose(hFind);
}

return dwCount;
}

int _tmain(int argc, TCHAR *argv[])
{
DWORD dwCount = ListOfFiles(TEXT(FOLDER));
_tprintf(TEXT("Total renamed: %ld\n"), dwCount);
return 0;
}

Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
Все отлично. Быстро и качественно
~ 2 года назад
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Фрилансер
Все прошло отлично, оплата во время, рекомендую.
~ 2 года назад