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

Ваш аккаунт

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

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

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

Копирование

1.8K
11 июля 2003 года
A_l_e_x_T
40 / / 27.10.2002
Здравствуйте!
Кто знает как можно копировать целиком содержимое папки со всеми файлами и вложенными папками.
Спасибо
460
11 июля 2003 года
Berg
261 / / 27.03.2003
в цикле...
293
11 июля 2003 года
SEDEGOFF
586 / / 06.10.2002
Если посмотришь на этом форуме хорошенько то найдешь даже пример
1.8K
11 июля 2003 года
A_l_e_x_T
40 / / 27.10.2002
Цитата:
Originally posted by Berg
в цикле...




Ясно понятно что в цикле, например с помощью findfirst, findnext. Просто может у кого есть пример. Или есть другие предложния по этому поводу. В принципе я примерно знаю как: необходимо сканировать папку, копировать ее куда надо вместе со всеми вложенными.

1.8K
11 июля 2003 года
A_l_e_x_T
40 / / 27.10.2002
Цитата:
Originally posted by SEDEGOFF
Если посмотришь на этом форуме хорошенько то найдешь даже пример



Если честно, то что то я не нашел, может быть плохо искал

293
11 июля 2003 года
SEDEGOFF
586 / / 06.10.2002
Да - чето нет. Я выкладввал пример копирования с API
Ну ладно - вот еще


SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = temp_patch + "\\*.*" + '\0' + '\0';
String des = patch+ "\\" + '\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);

460
11 июля 2003 года
Berg
261 / / 27.03.2003
Ну, там несколько строк кода-то всего будет...
На вскидку пишем рекурсивную функцию типа:

Если атрибут == ftDirectory, то
{
копируем каталог;
в цикле для всех ее внутренностей запускаем себя;
}
else
Если атрибут == ftAnyFile, то
копируем файл (условие выхода из рекурсии)

P.S. Есть вещи, которые быстрее написать, чем найти...

P.P.S. Вариант SEDEGOFF с SHFileOperation, конечно, более грамотен, ибо показывает всю мощь WIN API. Его и пользуй...
1.8K
12 июля 2003 года
A_l_e_x_T
40 / / 27.10.2002
Цитата:
Originally posted by SEDEGOFF
Да - чето нет. Я выкладввал пример копирования с API
Ну ладно - вот еще


SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = temp_patch + "\\*.*" + '\0' + '\0';
String des = patch+ "\\" + '\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);



Спасибо все получается

1.8K
12 июля 2003 года
A_l_e_x_T
40 / / 27.10.2002
Цитата:
Originally posted by SEDEGOFF
Да - чето нет. Я выкладввал пример копирования с API
Ну ладно - вот еще


SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = temp_patch + "\\*.*" + '\0' + '\0';
String des = patch+ "\\" + '\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);



Данный метод работает все нормально, но только почему то когда я копирую с одного тоже диска, на тот же. А когда начинаю копировать, например с диска а:, на диск с:, или наоборот ни чего не получается, точнее он к дискам обращается, но не копирует

293
13 июля 2003 года
SEDEGOFF
586 / / 06.10.2002
Цитата:
Originally posted by A_l_e_x_T


Данный метод работает все нормально, но только почему то когда я копирую с одного тоже диска, на тот же. А когда начинаю копировать, например с диска а:, на диск с:, или наоборот ни чего не получается, точнее он к дискам обращается, но не копирует


Вот тут я тебе ничего сказать не могу - так как у меня все работает прекрасно
А что тебе сообщает функция

1.8K
13 июля 2003 года
A_l_e_x_T
40 / / 27.10.2002
Цитата:
Originally posted by SEDEGOFF

Вот тут я тебе ничего сказать не могу - так как у меня все работает прекрасно
А что тебе сообщает функция



Функция ни чего не сообщает. Происходит обращение к диску например а:, комп что то делает, а не копирует.

Может у меня ошибка написании:
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = "a:\\";
String des = "c:\\pupkin\\;
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_SILENT;
SHFileOperation(&op);

293
13 июля 2003 года
SEDEGOFF
586 / / 06.10.2002
Цитата:
Originally posted by A_l_e_x_T


Функция ни чего не сообщает. Происходит обращение к диску например а:, комп что то делает, а не копирует.

Может у меня ошибка написании:
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = "a:\\";
String des = "c:\\pupkin\\;
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_SILENT;
SHFileOperation(&op);


Так точно - ошибка
Должно быть так

SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = "a:\\*.*"+'\0'+'\0';
String des = "c:\\pupkin\\+'\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);
[/QUOTE]

А если хочешь копировать конкретные файлы то
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = "a:\\1.txt"+'\0'+"2.rar"+'\0'+"3.zip"+'\0'+'\0';
String des = "c:\\pupkin\\+'\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);

13K
19 января 2007 года
CuHaK
31 / / 28.10.2006
[QUOTE=SEDEGOFF;23808]Так точно - ошибка
Должно быть так

SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = "a:\\*.*"+'\0'+'\0';
String des = "c:\\pupkin\\+'\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);

Все также написал пишет что не удается найти папку я написал так:
 
Код:
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = "all\\*.*"+'\0'+'\0';
String des = "c:\\pupkin\\+'\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);


Папка all существует в папке с программой
92
22 января 2007 года
Тень Пса
2.2K / / 19.10.2006
а полный путь написать уже лень? хотябы добавив вот это ExtractFilePath(Application->ExeName) в начало :)
52K
10 ноября 2009 года
v-i.king
6 / / 10.11.2009
Здравствуйте! В программировании слаб(((( Помогите плиз!
Использую код
Цитата:

...
#include <shellapi.h>
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
...
// тут определяется содержимое lpFileName
...
AnsiString temp_patсh = "D:\\TEMP";
AnsiString patch = "D:\\TEMP2";

if (CheckBox1->Checked == false)
{
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
String sour = temp_patсh + "\\" + lpFileName + '\0' + '\0';
String des = patch+ "\\" + lpFileName + '\0'+'\0';
op.hwnd = 0;
op.wFunc = FO_COPY;
op.pFrom = sour.c_str();
op.pTo = des.c_str();
op.fFlags = FOF_FILESONLY;
SHFileOperation(&op);
}
else

SHFILEOPSTRUCT sh;
ZeroMemory(&sh, sizeof(sh));
String sour = temp_patсh + "\\*.*" '\0' + '\0';
String des = patch+ "\\" + '\0'+'\0';
sh.hwnd = 0;
sh.wFunc = FO_COPY;
sh.pFrom = sour.c_str();
sh.pTo = des.c_str();
sh.fFlags = FOF_FILESONLY;
SHFileOperation(&sh);
}


Выдает ошибку

[C++ Error] Unit1.cpp(110): E2451 Undefined symbol 'sh'

Не знаю что делать :( Неужели операцию нельзя использовать 2-й раз но уже с другими параметрами?

12K
10 ноября 2009 года
Ghox
297 / / 26.07.2009
Цитата: v-i.king
Здравствуйте! В программировании слаб(((( Помогите плиз!
Использую код

Выдает ошибку

[C++ Error] Unit1.cpp(110): E2451 Undefined symbol 'sh'

Не знаю что делать :( Неужели операцию нельзя использовать 2-й раз но уже с другими параметрами?


Тэги [NOPARSE]

 
Код:
 
[/NOPARSE]
нужно использовать при постинге кода. А также смотреть на дату последнего сообщения и не постить в старые темы.

По поводу вопроса. Полагаю, что все, что идет после else, нужно обернуть в скобки, иначе получается что переменная sh у вас сейчас определена только в ветвлении else, и дальше уже не видна:

Код:
// ...
    if (CheckBox1->Checked == false)
    {
        // ...
    }
    else
    {
        SHFILEOPSTRUCT sh;
        ZeroMemory(&sh, sizeof(sh));
        String sour = temp_patсh + "\\*.*" '\0' + '\0';
        String des = patch+ "\\" + '\0'+'\0';
        sh.hwnd = 0;
        sh.wFunc = FO_COPY;
        sh.pFrom = sour.c_str();
        sh.pTo = des.c_str();
        sh.fFlags = FOF_FILESONLY;
        SHFileOperation(&sh);
    }
}
52K
10 ноября 2009 года
v-i.king
6 / / 10.11.2009
Цитата: Ghox
Тэги [NOPARSE]
 
Код:
 
[/NOPARSE]
нужно использовать при постинге кода. А также смотреть на дату последнего сообщения и не постить в старые темы.

По поводу вопроса. Полагаю, что все, что идет после else, нужно обернуть в скобки, иначе получается что переменная sh у вас сейчас определена только в ветвлении else, и дальше уже не видна:


Я извиняюсь за допущенную ошибку, постараюсь исправиться. Я так понимаю нужно было создать новую тему? Но раз уж тут появились новые посты, думаю можно уже и сюда :)
Спасибо за помощь! Все так просто оказалось:confused:, а я даже не догадался.
Появилась еще одна проблема...
Должен копироваться файл с вложенной директории, в другую, которая должна создаться автоматически.
При использовании флага FOF_NOCONFIRMATION не происходит опирование файла.

 
Код:
...
sh.fFlags = FOF_NOCONFIRMATION |FOF_SILENT;
...

Без использования этого флага, задается вопрос о создании директории и все работает, копируется!
52K
15 ноября 2009 года
v-i.king
6 / / 10.11.2009
Спасибо за помощь, поставил флаг FOF_NOCONFIRMMKDIR
 
Код:
...
op.fFlags = FOF_FILESONLY | FOF_NOCONFIRMMKDIR;
...

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