Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

SUBST для файлов   Найти похожие ветки 

 
Eugene30   (2004-12-09 20:03) [0]

Подскажите, пожалуйста, как реализовать аналог Windows команды SUBST, но не для папок, а для файлов?

Напр. система пытается читать файл C:\TEMP\1.foo, которого может и не быть на самом деле, а ей так прозрачно, что она даже не замечает :), подсовывается содержимое файла F:\TEXT\2.txt. Система при этом думает, что она прочитала C:\TEMP\1.foo.


 
Eugene30   (2004-12-09 22:53) [1]

Даже так было бы достаточно:
система пытается прочитать C:\1.txt,
а ей подсовываетсяD:\1.txt.


 
GuAV ©   (2004-12-09 22:56) [2]

Eugene30   (09.12.04 22:53) [1]
Так это и обычным subst делается.


 
Alex Konshin ©   (2004-12-09 23:45) [3]

На NTFS в пределах одного тома для файлов можно использовать hardlink"и. То есть, один и тот же файл будет виден в (возможно) разных директориях и/или под (возможно) разными именами. Но нельзя  создать hardlink на файл на другом томе(логическом диске). То есть это аналог hardlink"ов на unix.

На NTFS (под W2k + какой-то SP или под XP) также можно создать junction - это некий ограниченный аналог символических линков из unix. Но ограничения серьезные - линк можно создать только для  директориев на локальных NTFS дисках. То есть, ни сетевой линк, ни линк для файла создать не удастся.

Теперь о том, как их создавать. В стандартной инсталяции w2k и XP нет средств для создания этих линков. Вы можете использовать последнюю бету файлменеджера Far, который умеет создавать и те, и другие линки (клавиша Alt-F6). У меня на сайте есть также собственная утилита xlink с исходниками, которая позволяет это делать из командной строки.


 
Anatoly Podgoretsky ©   (2004-12-10 00:36) [4]

Стандартный ярлык по смыслу одно и тоже


 
Alex Konshin ©   (2004-12-10 01:44) [5]

Не-е-е. Ярлык(shortcut) совсем не то же самое.
Линки обрабатываются на уровне файловой системы. С точки зрения практически всех программ никакой разницы между доступом по разным линкам нет, в случае hardlink там вообще нет разницы между оригинальным путем к файлу и hardlink"ом - они равноправны, это просто два пути к одному файлу, если один из них удалить - файл останется и будет виден по другому пути.
Ярлыки же понимает только экплорер, все другие программы воспринимают его как файл *.lnk, и где же тут "одно и то же"?.


 
Eugene30   (2004-12-10 02:12) [6]

Наверное, я своим вторым постом только исказил задачу. Смысл в том, чтобы подставлялось содержимое другого файла, который отличается от первого.

GuAV
насколько я понимаю, обычным subst все-таки не получается. Во-первых, он создает новую точку доступа параллельно, а не вместо существующей. А во-вторых, новой точкой доступа может быть только корень виртуального диска. Мне же надо - файл внутри какого-то пути.
Если в чем-то не прав, прошу поправить.

Alex Konshin
спасибо за подробный ответ!
К сожалению, у меня именно принципиально, чтобы содержимое файла считывалось с другого логического диска :(
И потом hardlinks - это же когда файлы имеют разные имена, расположены в разных местах на диске, а содержимое у них одно? Тогда тоже не подходит...
(btw на FAT32 такое тоже можно релизовать, да и вообще наверное на любой файловой системе. Просто в таблице размещения файлов разные файлы ссылаются на один и тот же участок диска. Правда утилиты соответствующие мне не встречались. Разве что программы оптимизации ISO-образов.)

Anatoly Podgoretsky
ярлык, по-видимому, тоже не подойдет. У меня имя файла, который читается, известно совершенно точно, и его нельзя заменить на другое (с расширением .lnk).

---------------

Мне видится решение где-то в области перехвата операций чтения файлов.

Напрашивается аналогия с локальным прокси для загрузки данных из интерента. Например я с помощью Proxomitron могу на лету - и совершенно прозрачно для броузера и других программ - изменить содержимое загружаемых файлов. Причем, какие файлы/данные модифицируются, а какие нет, и по какому принципу меняется содержимое - очень гибко настраивается.

Но как это сделать применительно к файловой системе, я пока не представляю. Перерыл  в инете - ничего не нашел. Поэтому решил обратиться сюда, может кто подскажет направление, а я уж там буду копать.
А может уже существуют готовые решения. Не может же быть такого, чтобы никому до сих пор не приходило в голову заняться такой проблемой...


 
Alex Konshin ©   (2004-12-10 02:33) [7]

Я так и не понял чего нужно...

Тебе нужно почитать про IFS. Смотреть в сторону reparse points.

Из готовых навороченных решений подойдет Clearcase, только он сильно небесплатный и довольно сложный в администрировании. Возможно и некоторые другие навороченные VСS это умеют (только те, что умеют создавать динамический view, большинство этого не умеет).


 
Cobalt ©   (2004-12-10 09:05) [8]

2 Alex Konshin ©   (09.12.04 23:45) [3]
http://home.earthlink.net/~akonshin/files/xlink.zip
EarthLink >  Error >  Page Not Found
  Page Not Found
We"re Sorry! We can"t locate the page you requested.


 
Eugene30 ©   (2004-12-10 16:42) [9]

Alex Konshin
Спасибо еще раз! Похоже, что юниксовские symlink - это то, что мне нужно, т.к. оно работает как раз для произвольных файлов... И возможно, это даже можно как-то реализовать в Windows NT-линейке под NTFS через механизм reparse points... (???)

В MSDN инфы не так уж много. Вот здесь нашел вроде бы неплохую статью: http://shell-shocked.org/article.php?id=284
буду разбираться...

Конечно, готовое решение не помешало бы...
Посмотрел на сайте описание IBM RationalRose ClearCase. Честно говоря, даже не понял проблематику, на которую оно расчитано. Мда.

В общем, ушел читать про
NTFS 5, Installable file system (IFS), Junction, Reparse Ponints, Virtual Connections" systems (так надо понимать VCS?) и т.д.

вернусь, наверное, не скоро...

Cobalt
http://home.earthlink.net/~akonshin/files/XLink.zip


 
Eugene30 ©   (2004-12-10 16:46) [10]

NTFS does not implement "true" symbolic file linking as exists within UNIX file systems, but the functionality can be simulated by using reparse points. In essence, a symbolic link is a reparse point that redirect access from one file to another file.

Источник:
http://www.pcguide.com/ref/hdd/file/ntfs/filesReparse-c.html


 
Alex Konshin ©   (2004-12-10 22:16) [11]

Cobalt ©   (10.12.04 09:05) [8]
>2 Alex Konshin ©   (09.12.04 23:45) [3]
>http://home.earthlink.net/~akonshin/files/xlink.zip

EarthLink >  Error >  Page Not Found
 Page Not Found
We"re Sorry! We can"t locate the page you requested.

Fixed.
На всякий случай должно быть так:
http://home.earthlink.net/~akonshin/files/XLink.zip


 
Alex Konshin ©   (2004-12-10 22:26) [12]

Eugene30 ©   (10.12.04 16:42) [9]
Похоже, что юниксовские symlink - это то, что мне нужно, т.к. оно работает как раз для произвольных файлов... И возможно, это даже можно как-то реализовать в Windows NT-линейке под NTFS через механизм reparse points... (???)

Реализовать-то может и можно, но сложно. Это требует написания драйвера - фильтра IFS (так что Delphi тут не поможет).
Вообще-то я как-то находил готовый такой драйвер с исходниками, у меня дома где-то должен лежать. Забыл посмотреть... Кстати, в поставке IFS есть некие примеры, но я помню, что сразу готового к использованию там нет, а самому ковырять уж больно хлопотно показалось, лично мне было лень. Так что я не из простого любопытства спрашивал про твое задачу - нужно оценить, стоит ли эта задача таких хлопот.


 
Alex Konshin ©   (2004-12-10 22:31) [13]

Virtual Connections" systems (так надо понимать VCS?)
Не, под VCS обычно понимают Version Control System


 
Eugene30 ©   (2004-12-12 05:02) [14]

Alex Konshin
Еще раз спасибо и извини за задержку с ответом!
Написание фильтра IFS мне не по силам :(
Да и задача, откровенно говоря, хлопот не стоит. Обходное работающее решение у меня и так есть, просто хотелось найти более элегантный вариант.



Страницы: 1 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
1-1105454109
odessey
2005-01-11 17:35
2005.01.30
А если принтеров несколько. Как назначить нужный?


1-1106034327
Vyacheslav
2005-01-18 10:45
2005.01.30
Kylix и zip архив !!!


1-1105637174
redlord
2005-01-13 20:26
2005.01.30
проверка на наличие компонента созданного в рантайме


1-1105693275
Nad89
2005-01-14 12:01
2005.01.30
Тип данных типа string


1-1105960865
Progh
2005-01-17 14:21
2005.01.30
Отграничение прав в TWebBrowser-e