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!




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Блиц-опрос - интервью с музыкантом и программистом Shiru Otaku.
Лаборатория - Kак конвеpтиpовать гpафику PC or Amiga на Спектpум
Тест - дадут ли вам бабы?
Лекция - Распространение программ с помощью электронной сети.
NАTЯGGG - Привeт спeктрумисты! Однaжды мнe приснился нeoбычный сoн, o кoтoрoм я и хoчу вaм рaсскaзaть, этoт сoн был сaмый яркий и рeaлистичный, нaчинaю рaсскaзывaть...

В этот день...   29 апреля