Показать полную графическую версию : Копирование всех файлов из директории
Ребята как на С++ и АРI реализовать копирование всех файлов из одной директории в другую?
EvgeniyQQQ
02-09-2009, 15:35
Я бы сделал так:
1. Сформировал список путей копируемых фалов с помощью функций: FindFirstFile(), FindNextFile.
2. Сформировал список путей к новым файлам: директория приёмник + имя фала из первого списка.
3. Организовал цикл копирования файлов с использованием функции CopyFile().
Если файлов в директории много, то можно выполнять копирование в потоках (thread) с целью ускорения процесса. Но думаю не стоит создавать большое количество потоков, т. к. это излишне загружает систему.
А как это все организовать в коде? Ато я мидрил с FindFirst\NextFile(), CopyFile() но ничего толком не вышло ничего не копируется(((
А как это все организовать в коде? »
Примерно так:
#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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.