ne_viens
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #define UNICODE #include <windows.h> #include <stdlib.h> #include <stdio.h>
///////////////////////////////////////////////////////////////////////////////////////// void createDir(wchar_t* targetDir) { int i, tmp; wchar_t buf[MAX_PATH];
tmp = GetFileAttributes(targetDir); if(INVALID_FILE_ATTRIBUTES != tmp && (FILE_ATTRIBUTE_DIRECTORY & tmp)) return;
tmp = wcslen(targetDir); for(i = 0; i < tmp; ++i) if('\\' == targetDir[i]) { memcpy(buf, targetDir, i * 2 + 2); buf[i + 1] = 0; //'"'; buf[i + 2] = 0; CreateDirectory(buf, NULL); } }
///////////////////////////////////////////////////////////////////////////////////////// void findAllAndCopy(wchar_t* wrkdir, wchar_t* targetDir) { int i; HANDLE h; WIN32_FIND_DATA fd; wchar_t *ptr, *ptr2, wbuf[MAX_PATH], wsrc[MAX_PATH], wdest[MAX_PATH];
swprintf(wbuf, sizeof(wbuf), L"%s\\*.*", wrkdir); h = FindFirstFile(wbuf, &fd); if(INVALID_HANDLE_VALUE == h) return;
i = wcslen(wrkdir); //get pointer to innermost src directory ptr = wrkdir + i; for( ; i; --i) if('\\' == *--ptr) break;
if(i) ptr2 = L"%s%s"; //add innermost src directory to target directory else ptr2 = L"%s"; //is root directory, no innermost directory added swprintf(wbuf, sizeof(wbuf), ptr2, targetDir, ptr); CreateDirectory(wbuf, NULL); //create target dir
do //main copy loop { if(wcscmp(fd.cFileName, L".") && wcscmp(fd.cFileName, L"..")) { swprintf(wsrc, sizeof(wsrc), L"%s\\%s", wrkdir, fd.cFileName);
if(FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes) //is directory? { findAllAndCopy(wsrc, wbuf); //call self } else //is file { swprintf(wdest, sizeof(wdest), L"%s\\%s", wbuf, fd.cFileName); CopyFile(wsrc, wdest, 0); } }
} while(FindNextFile(h, &fd));
FindClose(h); }
///////////////////////////////////////////////////////////////////////////////////////// main() { createDir(L"c:\\temptemp\\"); findAllAndCopy(L"c:\\temp", L"c:\\temptemp\\"); }
|