понедельник, 17 января 2011 г.

Копирование папок с подпапками на WinAPI

Программа, позволяющая переместить целиком любой каталог (с вложенными подкаталогами).
Имя исходного каталога и каталога назначанеия программа получает через командную строку.
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;

//indir - откуда копировать
//outdir - куда копировать
BOOL Copy(char indir[128],char outdir[128])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
CreateDirectory(outdir, NULL);//создаём директорию куда всё будем копировать
char maska[128] = {0};
strcat(maska,indir);strcat(maska,"/*");//Где какие файлы ищем
hFind = FindFirstFile(maska, &FindFileData);//Поиск файлов
if(hFind == NULL) return FALSE;

do
{

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)// нашли папку
{
if(strcmp(FindFileData.cFileName,".")&&strcmp(FindFileData.cFileName,".."))
{
printf ("Copy Directory  %s\n", FindFileData.cFileName);
char indir2[128]={0};char outdir2[128]={0};
strcat(indir2,indir);strcat(indir2,"/");strcat(indir2,FindFileData.cFileName);strcat(indir2,"/");
strcat(outdir2,outdir);strcat(outdir2,"/");strcat(outdir2,FindFileData.cFileName);
Copy(indir2,outdir2);//рекурсивный вызов функции
}
}
else//нашли файл
{
printf ("Copy File  %s\n", FindFileData.cFileName);
char indir2[128]={0};char outdir2[128]={0};
strcat(indir2,indir);strcat(indir2,"/");strcat(indir2,FindFileData.cFileName);
strcat(outdir2,outdir);strcat(outdir2,"/");strcat(outdir2,FindFileData.cFileName);
CopyFile (indir2,outdir2, TRUE);//копируем файл
}
}
while(FindNextFile(hFind, &FindFileData));//пока есть что копировать
FindClose(hFind);
return TRUE;
}


int main(int argc, char *argv[])
{
Copy(argv[1],argv[2]);
getch();
return 0;
}

0 коммент.:

Отправить комментарий