ZXNet эхоконференция «zxnet.pc»
тема: копирование директорий (удивительное рядом)
от: Kirill Frolov
кому: All
дата: 05 Apr 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!
|