Войти

Показать полную графическую версию : Копирование всех файлов из директории


DaRiYs
02-09-2009, 02:01
Ребята как на С++ и АРI реализовать копирование всех файлов из одной директории в другую?

EvgeniyQQQ
02-09-2009, 15:35
Я бы сделал так:
1. Сформировал список путей копируемых фалов с помощью функций: FindFirstFile(), FindNextFile.
2. Сформировал список путей к новым файлам: директория приёмник + имя фала из первого списка.
3. Организовал цикл копирования файлов с использованием функции CopyFile().

ganselo
02-09-2009, 20:19
Если файлов в директории много, то можно выполнять копирование в потоках (thread) с целью ускорения процесса. Но думаю не стоит создавать большое количество потоков, т. к. это излишне загружает систему.

DaRiYs
03-09-2009, 21:03
А как это все организовать в коде? Ато я мидрил с FindFirst\NextFile(), CopyFile() но ничего толком не вышло ничего не копируется(((

ganselo
03-09-2009, 23:36
А как это все организовать в коде? »
Примерно так:

#include <windows.h>

void Copy(LPCTSTR szInDirName, LPCTSTR szOutDirName, bool flag = false)
{
WIN32_FIND_DATA ffd;
HANDLE hFind;

TCHAR szFind[MAX_PATH + 1];
TCHAR szInFileName[MAX_PATH + 1];
TCHAR szOutFileName[MAX_PATH + 1];

lstrcpy(szFind, szInDirName);
lstrcat(szFind, "\\*.*"); //ищем файлы с любым именем и рысширением

hFind = FindFirstFile(szFind, &ffd);

do
{
//Формируем полный путь (источник)
lstrcpy(szInFileName, szInDirName);
lstrcat(szInFileName, "\\");
lstrcat(szInFileName, ffd.cFileName);

//Формируем полный путь (результат)
lstrcpy(szOutFileName, szOutDirName);
lstrcat(szOutFileName, "\\");
lstrcat(szOutFileName, ffd.cFileName);

if(flag) //если flag == true, то копируем и папки
{
if(ffd.dwFileAttributes & 0x00000010)
{
if(lstrcmp(ffd.cFileName, ".") == 0 ||
lstrcmp(ffd.cFileName, "..") == 0) continue;

CreateDirectory(szOutFileName, NULL);
Copy(szInFileName, szOutFileName);
}
} //иначе пропускаем папки
else
if(ffd.dwFileAttributes & 0x00000010) continue;

CopyFile(szInFileName, szOutFileName, TRUE);
}
while(FindNextFile(hFind, &ffd));

FindClose(hFind);
}

int main()
{
//В конце пути к папкам не нужно добавлять "\"
Copy("C:\\1", "C:\\2", true); //если нужно скопировать и поддиректории
Copy("C:\\1", "C:\\2"); //если нужно скопировать только файлы
}




© OSzone.net 2001-2012