Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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\\");
}

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 12:22 27-03-2015
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru