Си под WinAPI. Процессы и потоки(дополнить существующий код)
500 руб. за проект
Изменить код таким образом, чтобы каждый каталог обрабатывался отдельным потоком (в среде 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;
}
#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;
}
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.