копирование директорий (удивительное рядом) — ZXNet «zxnet.pc»

копирование директорий (удивительное рядом)

ZXNet echo conference «zxnet.pc»



from: Kirill Frolov
to: All
date: 5 April 2003
============================================================================= * Forwarded by Kirill Frolov (500:812/1.507) * Area : ru.dos (ru.dos) * From : Nick Mikhailenko, 2:5020/194.118 (03 Apr 03 06:13) * To : All * Subj : копирование директорий (удивительное рядом) ============================================================================= RealName Михайленко Hиколай Hиколаевич Hello All! Казалось бы при копировании файлов никаких неясностей быть не может, однако ... Исходная конфигурация файлов. В скобках слева указан файл, содержащийся в данном подкаталоге ▌▐ └──Y └──Y └──Y (yfile) └──Z (zfile) Результат копирования: YY -> \n разными файловыми менеджерами NC.EXE v 5.0 1995 г VC.COM v 4.05 2000 г FAR.EXE v 1.70b4 2002 г F5: YY -> \n Смотрите, подкаталог Z скопировался дважды ▌▐ └──Y ├──Z (zfile) └──Y (yfile) ├──Y (yfile) │ └──Z (zfile) └──Z (zfile) Win 98, xcopy YY /e здесь фишка в том, что копируется не каталог YY, а его _содержимое_ Получается, вот что ▌▐ └──Y (yfile) ├──Y │ └──Y (yfile) │ └──Z (zfile) └──Z (zfile) Win 98, Проводник VC.COM v 4.99.08а 2000 г CC.EXE freeware 2003 г ▌▐ └──Y └──Y (yfile) ├──Y (yfile) │ └──Z (zfile) └──Z (zfile) Угадайте с трёх раз, какой вариант копирования является правильным Посмотрите, как копируются директории под линуксом Алгоритм копирования дерева директорий ══════════════════════════════════════ Hужно учесть следующие обстоятельства: 1. Спускаясь в новую директорию, сначала копируем все её файлы и только потом переходим к подкаталогам 2. Подкаталоги вида Y(Y)... копируем в последнюю очередь (все подкалоги в цепочке имеют одно и тоже имя) 3. Если при подъёме по дереву директорий выходим в каталог такого вида, то процесс копирования считается завершённым ══════════════════════════════════════ Я полагал задачу решённой, однако Витя Хименко усомнился, что исправленный алгоритм копирования охватывает все случаи. Я ему сказал решительное - нет. Hо вскоре сам придумал контрпример. Создайте цепочку XYXYX и скопируйте XYX -> \n Коммандер на СИ обламался и скопировал подкаталог Z дважды Зато эксплорер виндов 98 и волк 08a сработали верно. Ума не приложу, как они этого добиваются. Для себя я решил, что хватит усложнять алгоритм копирования. Практического значения это не имеет. Примеры вымученные. А пользователю надо знать, что не следует копировать ветку директорий вверх с перекрытием себя. А если очень хочется, то сделайте это в два этапа с промежуточной целью. Сначала куда-то вбок, а потом куда надо. Кстати, подобным образом, в два этапа можно скопировать директорию _в себя_. При этом никакого размножения директорий с одинаковым именем не произойдёт. ========================================================================== С уважением Nick -+- Берегите букву ё ! nick@mccme.ru Proton-S developer + Origin: http://nick.anihost.ru - выбери строй (2:5020/194.118) ============================================================================= Hемедленно нажми на RESET, All!