Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1105523396
Кладовщик
2005-01-12 12:49
2005.01.30
Случайно попал в кладовку :)


3-1104155962
Артемиус
2004-12-27 16:59
2005.01.30
Как определить количество и имена таблиц в базе?


1-1105688775
SIG
2005-01-14 10:46
2005.01.30
Конвертация BLOB в Graphic


1-1105698951
Unknown
2005-01-14 13:35
2005.01.30
Application.CreateForm


3-1103841286
AliceSpain
2004-12-24 01:34
2005.01.30
Картинки где лучше хранить для сетевой базы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский