Копирование
Кто знает как можно копировать целиком содержимое папки со всеми файлами и вложенными папками.
Спасибо
в цикле...
Ясно понятно что в цикле, например с помощью findfirst, findnext. Просто может у кого есть пример. Или есть другие предложния по этому поводу. В принципе я примерно знаю как: необходимо сканировать папку, копировать ее куда надо вместе со всеми вложенными.
Если посмотришь на этом форуме хорошенько то найдешь даже пример
Если честно, то что то я не нашел, может быть плохо искал
Ну ладно - вот еще
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);
На вскидку пишем рекурсивную функцию типа:
Если атрибут == ftDirectory, то
{
копируем каталог;
в цикле для всех ее внутренностей запускаем себя;
}
else
Если атрибут == ftAnyFile, то
копируем файл (условие выхода из рекурсии)
P.S. Есть вещи, которые быстрее написать, чем найти...
P.P.S. Вариант SEDEGOFF с SHFileOperation, конечно, более грамотен, ибо показывает всю мощь WIN API. Его и пользуй...
Да - чето нет. Я выкладввал пример копирования с 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);
Спасибо все получается
Да - чето нет. Я выкладввал пример копирования с 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);
Данный метод работает все нормально, но только почему то когда я копирую с одного тоже диска, на тот же. А когда начинаю копировать, например с диска а:, на диск с:, или наоборот ни чего не получается, точнее он к дискам обращается, но не копирует
Данный метод работает все нормально, но только почему то когда я копирую с одного тоже диска, на тот же. А когда начинаю копировать, например с диска а:, на диск с:, или наоборот ни чего не получается, точнее он к дискам обращается, но не копирует
Вот тут я тебе ничего сказать не могу - так как у меня все работает прекрасно
А что тебе сообщает функция
Вот тут я тебе ничего сказать не могу - так как у меня все работает прекрасно
А что тебе сообщает функция
Функция ни чего не сообщает. Происходит обращение к диску например а:, комп что то делает, а не копирует.
Может у меня ошибка написании:
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:\\";
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);
Должно быть так
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);
Все также написал пишет что не удается найти папку я написал так:
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 существует в папке с программой
Использую код
...
#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-й раз но уже с другими параметрами?
Использую код
Выдает ошибку
[C++ Error] Unit1.cpp(110): E2451 Undefined symbol 'sh'
Не знаю что делать :( Неужели операцию нельзя использовать 2-й раз но уже с другими параметрами?
Тэги [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);
}
}
По поводу вопроса. Полагаю, что все, что идет после else, нужно обернуть в скобки, иначе получается что переменная sh у вас сейчас определена только в ветвлении else, и дальше уже не видна:
Я извиняюсь за допущенную ошибку, постараюсь исправиться. Я так понимаю нужно было создать новую тему? Но раз уж тут появились новые посты, думаю можно уже и сюда :)
Спасибо за помощь! Все так просто оказалось:confused:, а я даже не догадался.
Появилась еще одна проблема...
Должен копироваться файл с вложенной директории, в другую, которая должна создаться автоматически.
При использовании флага FOF_NOCONFIRMATION не происходит опирование файла.
sh.fFlags = FOF_NOCONFIRMATION |FOF_SILENT;
...
Без использования этого флага, задается вопрос о создании директории и все работает, копируется!
op.fFlags = FOF_FILESONLY | FOF_NOCONFIRMMKDIR;
...
и все заработало! :)