Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Копирование всех файлов из директории (http://forum.oszone.net/showthread.php?t=149541)

DaRiYs 02-09-2009 02:01 1209275

Копирование всех файлов из директории
 
Ребята как на С++ и АРI реализовать копирование всех файлов из одной директории в другую?

EvgeniyQQQ 02-09-2009 15:35 1209680

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

ganselo 02-09-2009 20:19 1209871

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

DaRiYs 03-09-2009 21:03 1210780

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

ganselo 03-09-2009 23:36 1210920

Цитата:

Цитата DaRiYs
А как это все организовать в коде? »

Примерно так:
Код:

#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"); //если нужно скопировать только файлы
}



Время: 11:10.

Время: 11:10.
© OSzone.net 2001-