powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Копирование дерева
8 сообщений из 8, страница 1 из 1
Копирование дерева
    #32489216
director
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача, видимо, стара как MSDOS, но как это по-элегантней решить?

Нужно копировать (удалять) содержимое папки (включая все подпапки и под-под и...). Колличество под-уровней неизвестно.

1. Если использовать FindFirst и т.д. - кажнтся громоздко и наверное это неправильно?

2. SHFileOperation - читал, но, как понял, она не копирует подпапки там надо имя файла или список имен.

Так, что умные люди делают, а?
...
Рейтинг: 0 / 0
Копирование дерева
    #32489456
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто команду выполнить?
del ...
copy ...

Видимо, это можно сделать функцией system().
...
Рейтинг: 0 / 0
Копирование дерева
    #32489877
Gasanov2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напиши рекурсивную функцию, которая если находит файл удаляет (копирует), если каталог - вызывает себя
...
Рейтинг: 0 / 0
Копирование дерева
    #32490025
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что уже xcopy функция не работает
...
Рейтинг: 0 / 0
Копирование дерева
    #32490435
director
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу рекурсивной функции:

findfirst как правило находит сначала папки. Сл-но я буду углубляться в дерево и там что-то копировать. Но потом можно бкдет вернуться и докопировать то что начал на более верхних уровнях??

Если у кого есть такая задачка на Билдере плиз вывесите здесь. Я видел такое на каком-то непонятном языке, толком ничего не разобрал.

Извините.

кстати: что за функция xcopy() ???
...
Рейтинг: 0 / 0
Копирование дерева
    #32490784
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри не функция а команда операционной системы
windows
XCOPY источник [результат] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W]
[/C] [/Q] [/F] [/L] [/H] [/R] [/T]
[/K] [/O] [/X] [/Y] [/-Y] [/N] [/Z]
[/EXCLUDE:файл1[+файл2][+файл3]...]

источник Копируемые файлы.
результат Местоположение и/или имена новых файлов.
/A Копирование только файлов с установленным архивным атрибутом.
Сам атрибут при этом не изменяется.
/M Копирование только файлов с установленным архивным атрибутом.
После копирования атрибут снимается.
/D:дата Копирование файлов, измененных не ранее указанной даты.
Если дата не указана, заменяются только конечные файлы,
более старые, чем исходные.
/EXCLUDE:файл1[+файл2][+файл3]...
Список файлов, содержащих строки. Когда любая из строк
Совпадает с любой частью абсолютного пути к копируемому файлу,
такой файл исключается из операции копирования. К примеру,
указав строку \obj\ или .obj можно исключить все файлы из
папки obj или все файлы с расширением
obj соответственно.
/P Вывод запросов перед созданием каждого нового файла.
/S Копирование каталогов с подкаталогами (кроме пустых).
/E Копирование каталогов с подкаталогами (в том числе пустых).
Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.
/V Сравнение конечных файлов с исходными.
/W Вывод запроса на нажатие клавиши перед копированием.
/C Продолжение копирования, независимо от наличия ошибок.
/I Если результат не существует, а копируется несколько файлов,
считается, что указано имя каталога.
/Q Запрет вывода имен копируемых файлов.
/F Вывод полных имен исходных и конечных файлов.
/L Вывод имен копируемых файлов.
/H Копирование скрытых и системных файлов (среди прочих).
/R Разрешение замены файлов, предназначенных только для чтения.
/T Создание структуры каталогов (кроме пустых каталогов) без
копирования файлов. Если требуется создать пустые каталоги
и подкаталоги, используйте сочетание ключей /T /E.
/U Копирование только файлов, уже имеющихся в конечном каталоге.
/K Копирование атрибута "Только чтение" (обычно он сбрасывается).
/N Использование коротких имен при копировании.
/O Копирование сведений о владельце и данных ACL.
/X Копирование параметров аудита файлов (требует /O).
/Y Подавление запроса подтверждения на перезапись существующего
конечного файла.
/-Y Обязательный запрос подтверждения на перезапись существующего
конечного файла.
/Z Копирование сетевых файлов с возобновлением.

Ключ /Y можно установить через переменную среды COPYCMD.
Ключ /-Y командной строки переопределяет такую установку.
...
Рейтинг: 0 / 0
Копирование дерева
    #32490809
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по поводу findfirst

>>> findfirst как правило находит сначала папки. Сл-но я буду углубляться в
>>> дерево и там что-то копировать. Но потом можно бкдет вернуться и
>>>докопировать то что начал на более верхних уровнях??
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
void  findRec(string where, TListBox * list){
 TSearchRec foundInfo;
 vector <string> fileNames , dirNames;
 string whereStl = (where+ "\\*.*" );
 list->Items->Add ( "--- Dir --- " + AnsiString(where.c_str()) + " ---- ");
 
 if ( FindFirst (AnsiString(whereStl.c_str()) ,  faAnyFile , foundInfo) ==  0 ){
  do{
   if (foundInfo.Attr & faDirectory){
    if (foundInfo.Name != ". " && foundInfo.Name != " .. ")
     dirNames.push_back (foundInfo.Name.c_str());
   }
   else
    fileNames.push_back (foundInfo.Name.c_str());
  }while (FindNext(foundInfo) == 0 );
  FindClose(foundInfo);
 }

 for (vector<string>::iterator I = fileNames.begin(); I != fileNames.end(); I++ )
  list->Items->Add ("File:  " + AnsiString(I->c_str()));
 for (vector<string>::iterator I = dirNames.begin(); I != dirNames.end(); I++ )
  findRec (where + " \\" + (*I) , list);
}


void __fastcall TForm1::btnDirAllClick(TObject *Sender)
{
//
 ListBox1->Clear ();
 findRec (curdir->Directory.c_str() , ListBox1);
}
...
Рейтинг: 0 / 0
Копирование дерева
    #32491027
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема в этом форуме за 19-е января этого года, автор Aliga
"Как удалять в папке все файлы и существующие папки ?"

Или поиском по FindFirstFile
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Копирование дерева
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]