Форум: "WinAPI";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.072 c