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

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

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

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

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

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

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

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

Извините.

кстати: что за функция xcopy() ???
...
Рейтинг: 0 / 0
21.04.2004, 20:45
    #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
21.04.2004, 21:16
    #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
22.04.2004, 08:40
    #32491027
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование дерева
Тема в этом форуме за 19-е января этого года, автор Aliga
"Как удалять в папке все файлы и существующие папки ?"

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


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