-
Что-то не смог сходу найти, может кто направит как называется то что понадобится...
> Ядро Windows поддерживает следующие виды ссылок:
> * Hard Links — жёсткие ссылки, как в *nix. Доступны начиная с Windows NT4.
> * Junction Points — аналог символических ссылок. Доступен начиная с Windows 2000 (NTFS 5).
> * Symbolic Links — символьные ссылки. Доступны начиная с Windows Vista.
Как программно определить настоящая ли папка/файл, и если нет - то где находится настоящая/ий?
-
-
о.. Благодарю, пополз изучать. С:
-
>> и если нет - то где находится настоящая/ий?
А этой части я по ссылке не вижу...
-
уж не системные ли папки win7 и выше сканим?
-
ам... А есть разница? В перспективе может и их понадобится. Лично я пробую сейчас на таком:
REM symlinks_test.bat
MKLINK "C:\dev\symlinks\file1.txt" "E:\res\testing\file1.txt"
MKLINK "C:\dev\symlinks\folder1" "E:\res\testing\folder1"
MKLINK /D "C:\dev\symlinks\file2.txt" "E:\res\testing\file2.txt"
MKLINK /D "C:\dev\symlinks\folder2" "E:\res\testing\folder2"
MKLINK /H "C:\dev\symlinks\file3.txt" "E:\res\testing\file3.txt"
MKLINK /H "C:\dev\symlinks\folder3" "E:\res\testing\folder3"
MKLINK /J "C:\dev\symlinks\file4.txt" "E:\res\testing\file4.txt"
MKLINK /J "C:\dev\symlinks\folder4" "E:\res\testing\folder4"
-
Пардон, некоторые нельзя на другой диск:
> > MKLINK "C:\dev\symlinks\file1.txt" "E:\res\testing\file1.
> txt"
> символическая ссылка создана для C:\dev\symlinks\file1.txt
> <<===>> E:\res\testing\file1.txt
> > MKLINK "C:\dev\symlinks\folder1" "E:\res\testing\folder1"
> символическая ссылка создана для C:\dev\symlinks\folder1
> <<===>> E:\res\testing\folder1
> > MKLINK /D "C:\dev\symlinks\file2.txt" "E:\res\testing\file2.
> txt"
> символическая ссылка создана для C:\dev\symlinks\file2.txt
> <<===>> E:\res\testing\file2.txt
> > MKLINK /D "C:\dev\symlinks\folder2" "E:\res\testing\folder2"
> символическая ссылка создана для C:\dev\symlinks\folder2
> <<===>> E:\res\testing\folder2
> > MKLINK /H "C:\dev\symlinks\file3.txt" "E:\res\testing\file3.
> txt"
> Системе не удается переместить файл на другой диск.
> > MKLINK /H "C:\dev\symlinks\folder3" "E:\res\testing\folder3"
> Системе не удается переместить файл на другой диск.
> > MKLINK /J "C:\dev\symlinks\file4.txt" "E:\res\testing\file4.
> txt"
> соединение создано для C:\dev\symlinks\file4.txt <<===>>
> E:\res\testing\file4.txt
> > MKLINK /J "C:\dev\symlinks\folder4" "E:\res\testing\folder4"
> соединение создано для C:\dev\symlinks\folder4 <<===>> E:
> \res\testing\folder4
Причём file2.txt и file4.txt считаются папками и не открываются - "Неверно задано имя папки", а folder1 считается файлом к которому - "Отказано в доступе".
Переместил то что с цифрами "3" на диск C - всё равно не всё совсем:
> > MKLINK /H "C:\dev\symlinks\file3.txt" "C:\res\testing\file3.
> txt"
> Создана жесткая связь C:\dev\symlinks\file3.txt <<===>>
> C:\res\testing\file3.txt
> > MKLINK /H "C:\dev\symlinks\folder3" "C:\res\testing\folder3"
> Отказано в доступе.
DIR способен сказать и какого они типа и куда они смотрят. Как узнать это же на WinAPI программно?
-
> >> и если нет - то где находится настоящая/ий?
>
> А этой части я по ссылке не вижу...
>
Для симлинков - октрыть и сделать GetFinalPathNameByHandle.
Для хардлинков нельзя, т.к. в случае хардлинка оба имени настоящие.
-
Junction только для директориев. Hardlink только для файлов одной партишн.
Symlink вроде и для тех, и для других, но всё равно в пределах одной машины.
Для junction и hardlink я когда-то очень давно написал утилитку XLink, которая работает на XP и позднее. Исходники должны быть на моём древнем сайте, гугл его знает.
-
У вас там ссылка сломана, но скачать удалось (надо ток имя файла стереть из URL), спасибо!
Но теперь мне тоже интересно как это DIR делает, через какой-такой DeviceIoControl?
-
По моему GetFinalPathNameByHandle