Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

копирование каталога на другой диск средствами C++

88K
22 февраля 2014 года
Westert JGIddy
2 / / 22.02.2014
нужно переместить (или скопировать) каталог "copyfile", лежащий на диске D в существующий пустой каталог "LouReed", лежащий на диске C.
Привожу варианты, которые не работают:

 
Код:
CopyFile("D:\copyfile", "C:\LouReed", true);
MoveFile("D:\copyfile", "C:\LouReed");
MoveFileEx("D:\copyfile", "C:\LouReed", MOVEFILE_COPY_ALLOWED);
(но если назначение и путь к исходному файлу лежат на одном диске... понятно, что все работает.)
PS: компилятор Devcpp 4.9.9.2.
7
22 февраля 2014 года
@pixo $oft
3.4K / / 20.09.2006
CopyFile копирует только файлы, а в описании MoveFile сказано "A new directory must be on the same drive". То же самое верно и для MoveFileEx, читай MSDN.
Надо использовать другие функции.
326
22 февраля 2014 года
sadovoya
757 / / 19.11.2005
 
Код:
SHFILEOPSTRUCT s;
s.wFunc = FO_COPY;
s.pFrom = "C:\\folder\0"; //двойное нуль-терминирование
s.pTo = "D:\\folder_to\0";//тоже
... //остальные поля структуры

if(SHFileOperationA(&s))
       return 1000; //при ошибке
Подробнее в MSDN.
11K
23 февраля 2014 года
xAtom
65 / / 17.01.2011
Без использования shellapi придётся в ручную копировать файл за файлом создавая на лету каталоги это делается просто.

Код:
#include <stdio.h>
#include <tchar.h>
#include <io.h>
#include <direct.h>


//перенос папки(включая вложенные)
void  move_dir(const TCHAR* old_dir, const TCHAR* new_dir) {
    TCHAR        ps[FILENAME_MAX];
    TCHAR        ds[FILENAME_MAX];
    long         fp;
    _tfinddata_t fi;

    _stprintf(ps, _T("%s\\*.*"), old_dir);
    fp = _tfindfirst(ps, &fi);
    if(fp == -1L)
        return;

    if(_tmkdir(new_dir) != 0) {
       _findclose(fp);
       return;
    }

    do {
        _stprintf(ds, _T("%s\\%s"), new_dir, fi.name);
        _stprintf(ps, _T("%s\\%s"), old_dir, fi.name);

        if(fi.attrib & _A_SUBDIR) {
             if((fi.name[0] != _T('.')) && (_tcslen(fi.name) > 2))
                    move_dir(ps, ds);
             } else
                    rename(ps, ds);

    } while(_tfindnext(fp, &fi) != -1L);
    _findclose(fp);
    _rmdir(old_dir);
}


int main(void) {
   move_dir( _T("D:\\исходная папка"),_T("C:\\новое место"));
   _gettchar();
   return 0;
}
326
23 февраля 2014 года
sadovoya
757 / / 19.11.2005
Еще вариант:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <clocale>

int main () {

    setlocale(LC_ALL, "");

    if (!system(NULL)) {
        puts ("Командный процессор недоступен.");
        exit (EXIT_FAILURE);
    }

    system("xcopy D:\\copyfile C:\\LouReed /E");

    return 0;
}
88K
23 февраля 2014 года
Westert JGIddy
2 / / 22.02.2014
Цитата: sadovoya
Еще вариант:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <clocale>

int main () {

    setlocale(LC_ALL, "");

    if (!system(NULL)) {
        puts ("Командный процессор недоступен.");
        exit (EXIT_FAILURE);
    }

    system("xcopy D:\copyfile C:\LouReed /E");

    return 0;
}


спасибо, действительно помогло, почему-то забыл про старый добрый cmd.
Всем спасибо, проблема решена.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог