Вчера моя кузина посетовала, что не может найти на диске фотки, которые были переброшены с фотокамеры программой, шедшей вместе с камерой Canon. «Почему-то в My Pictures фотки не попадают, хотя куда-то копируются»- пожаловалась она. Фотографии, конечно, нашлись, и ютились они по адресу C:\Documents and Settings\Anne\My Documents\My Pictures.
На первый взгляд, так и должно быть, но дело в том, что документы и фотки у нее хранятся на другом, не системном разделе D:\. Открывая папку My Pictures, она и попадает на другой раздел. Поскольку перенаправление пользовательских папок было выполнено правильно, оставалось предположить, что в программе Canon жестко зашит путь %userprofile%\My Documents\My Pictures. Однако на вопрос «Какой именно программой ты пользуешься?» кузина пожала плечами — мол, подключаю камеру и все делается само ;) Камеры у нее тоже с собой не было, так что сэмулировать ситуацию я не мог.
Мы пойдем другим путем
Можно было, конечно, вычислить программу, покопаться в ее настройках и указать там путь для размещения фоток, но учитывая происходящее, я усомнился, что программа этот путь запомнит (и был прав; как мне позже сказал брат, он уже указывал программе правильный путь, но после перезапуска все возвратилось на круги своя).
Я сразу решил идти другим, более быстрым путем — просто перенаправить папку C:\Documents and Settings\Anne\My Documents\My Pictures в нужное расположение на диске D. Достигается это созданием символической ссылки. Фактически символическая ссылка перенаправляет одну папку в другую. Поскольку такие ссылки работают на уровне файловой системы, программы и не подозревают, что работают с другой папкой — им все так же доступна исходная папка по прежнему пути.
Создание символической ссылки
Если бы я работал в Windows Vista или Windows 7, я бы обошелся командой mklink. Синтаксис такой:
MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение /D Создание символической ссылки на каталог. По умолчанию создается символическая ссылка на файл. /H Создание жесткой связи вместо символической ссылки. /J Создание соединения для каталога. Ссылка Имя новой символической ссылки. Назначение Путь (относительный или абсолютный), на который ссылается новая ссылка.
Подробнее об этой команде можно почитать в статье Марка Руссиновича на Technet. Но я работал в XP, где проще всего для этой цели воспользоваться утилитой все того же Марка — Junction. Синтаксис простой:
junction <Ссылка> [<Назначение>]
т. е. сначала указывается исходная папка, а потом целевая. Если в пути содержатся пробелы (как это было в моем случае), его нужно заключить в кавычки. Так или иначе, этот способ сработает в Windows 2000 и новее.
Варианты применения символических ссылок
Для чего еще можно использовать символические ссылки? Да для чего угодно, когда вам нужно отобразить содержимое папки в другом месте диска. Например, у меня несколько проектов раскиданы по разным папкам, где много других второстепенных файлов. Для удобства бэкапа мне удобнее было бы видеть все проекты в одном месте, скажем в D:\4Backup. Нет проблем! В D:\4Backup создаются папки-ссылки на папки проектов. Теперь, если я, скажем, захочу прожечь все проекты на DVD, мне не нужно будет ползать по диску, собирая нужные папки — все сосредоточено в одном месте.
Еще примеры есть в записи про жесткие ссылки.
Slava21
А как сделать хардлинк?
Vadim Sterkin
Slava21, синтаксис mklink не видели в статье? Поэтому не ясно, что вам требуется, тем более терминология запутанная. Читайте http://forum.oszone.net/showthread.php?t=209013 — там есть все варианты.
Tom_Tom
Vadim, большое спасибо за разъяснение!
Ещё хотелось бы прояснить такой момент на конкретном примере. Создаю символическую ссылку, например
Перехожу по ней и создаю новую папку. Пробую её удалить — нет доступа.
По логике — всё правильно. На диске С действительно отсутствует эта новая папка. Однако операция перемещения работает (что, по сути есть копирование с последующим удалением). Где-то что-то я недопонял ;-)
Vadim Sterkin
A OS какая? Удалить соединение можно с ключом -d.
Tom_Tom
Vadim Sterkin,
Извините, забыл указать — XP.
Буквально несколько минут назад нашёл таки точно такую смоделированную ситуацию и хочу поделится находкой — http://forum.ru-board.com/topic.cgi?forum=62&topic=11143&glp
Всё-таки, видимо, это особенности помещения файлов в корзину. Не додумался я сразу проверить — мимо корзины — с shift’ом — вложенные папки удаляются нормально. И при включении опции корзины «Уничтожать файлы сразу после удаления не помещая их в корзину» — тоже. Любопытно.
Vadim Sterkin
Ок, спасибо за инфо!
aser
А можно так настроить сразу на папку пользователя? Например: (Windows 7) Есть папка C:\Users\Admin но мне хочется чтобы данные этой папки хранились в диске D.
Vadim Sterkin
Это не поддерживается. Правильно переносить профили во время установки файлом ответов.
aser
Vadim Sterkin,
С каким фалом ответов?
Vadim Sterkin
Таким
Сергей
Вадим, вроде ни разу не видел у Вас в блоге упоминание GUI для утилит создания символьных ссылок.
Использую Link Shell Extension для Проводника — очень удобно. http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html
Vadim Sterkin
Сергей, упоминания об этих утилитах есть по-моему в комментариях каждой записи блога о ссылках :) Я предпочитаю не вешать сторонние расширения на проводник, и особенно, если мне ссылку надо раз в полгода создать.
Lапыч
Вадим, простите что не по теме.
А кузина и племянница это не одно и то же? Просто, соблюдая терминологию, вместо брата, может быть, нужно было написать «бро»?;)
Vadim Sterkin
Вас в Гугле забанили?