Как задать относительный путь к файлу windows

Создать ярлык с относительным путём Windows 10 Решение и ответ на вопрос 2693116

0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

1

Создать ярлык с относительным путём

28.08.2020, 11:37. Показов 21372. Ответов 13


Доброго времени суток!
Столкнулась с такой потребностью как относительный путь в ярлыке.

Есть программа которая находится внутри нескольких папок:

[*путь до папки*]Service Centre OrdersService Centre OrdersDebugService Centre Orders.exe»

Сам ярлык создаю в первой папке *Service Centre Orders*

Нашла в интернете пример как можно написать относительный путь для ярлыка:

%windir%system32cmd.exe /C start /B /D *путь до папки с программой* *путь до папки с программой**название файла.exe*

Написала всё по примеру:

%windir%system32cmd.exe /C start /B /D Service Centre OrdersDebug Service Centre OrdersDebugService Centre Orders.exe

Но при нажатии на ярлык выдаёт ошибку, так как в названиях папок и самой программы есть пробелы.
Узнала что можно это исправить взяв путь в кавычки, но это не помогло, либо выдаёт ошибку, либо при запуске ярлыка ничего не происходит:

%windir%system32cmd.exe /C start /B /D «Service Centre OrdersDebug Service Centre OrdersDebugService Centre Orders.exe«

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Vovsla

27 / 20 / 7

Регистрация: 19.09.2018

Сообщений: 182

28.08.2020, 18:58

2

Лучший ответ Сообщение было отмечено Write как решение

Решение

Как все запущено… ) Хотя не очень )

Вот пример того, что нужно прописать в поле объекта ярлыка

Windows Batch file
1
C:WindowsSystem32cmd.exe /c start "" "%cd%info.txt"

Переменная %cd% возвращает текущее расположение файла

Хотя, так тоже будет работать

Windows Batch file
1
C:WindowsSystem32cmd.exe /c start "" "info.txt"

Перед путем к программе в кавычках нужно указать еще одни кавычки т.к. то, что указано в первых кавычках после команды start будет восприниматься как текст заголовка окна cmd.

И часть этого огорода можно избежать если создавать не ярлык, а файл с расширением BAT.
Тогда система сразу будет выполнять команды в cmd и строка сократиться до

Windows Batch file
1
start "" "info.txt"

И у Вас есть пробел после названия директории, очень сомневаюсь, что у Вас именно так, но оставлю как есть
Для ярлыка

Windows Batch file
1
C:WindowsSystem32cmd.exe /c start "" "Service Centre OrdersDebug Service Centre OrdersDebugService Centre Orders.exe"

Для bat файла

Windows Batch file
1
start "" "Service Centre OrdersDebug Service Centre OrdersDebugService Centre Orders.exe"



2



0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

28.08.2020, 23:24

 [ТС]

3

Vovsla,
Так же само выдаёт ошибку, пробел тоже пробовала убирать…

Миниатюры

Создать ярлык с относительным путём
 

Создать ярлык с относительным путём
 



0



Робот сгибальщик

831 / 456 / 95

Регистрация: 29.07.2020

Сообщений: 2,343

Записей в блоге: 7

29.08.2020, 10:19

4

Цитата
Сообщение от Write
Посмотреть сообщение

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

Путь: Service Centre OrdersService Centre OrdersDebugService Centre Orders.exe

Вы пишете: Service Centre Orders

Debug Service Centre OrdersDebugService Centre Orders.exe

По указанному пути, конечно же, файл не существует.



1



0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

29.08.2020, 21:14

 [ТС]

5

Jel, Я убирала пробел, но по примеру он был. Так как по примеру путь прописывается дважды.
Но хоть с ним, хоть без него, всё равно ошибка.

Добавлено через 4 часа 31 минуту
Vovsla, В bat файле написала путь единожды, а не дважды и заработало, программа открылась, спасибо большое, а с ярлыком так не работает, всё ещё не находит путь…



0



Робот сгибальщик

831 / 456 / 95

Регистрация: 29.07.2020

Сообщений: 2,343

Записей в блоге: 7

29.08.2020, 21:28

6

Цитата
Сообщение от Write
Посмотреть сообщение

Я убирала пробел, но по примеру он был.

Да не только пробел!!! В команде вы указываете несуществующий путь!
Вы же сами в начале задачи указали путь: Service Centre OrdersService Centre OrdersDebugService Centre Orders.exe
Структура папок выглядит так:
Название: Снимок.PNG
Просмотров: 428

Размер: 10.2 Кб
А в команде вы пишете совершенно другой путь. Лишнюю папку Debug (я её выделил зелёным ниже):
Название: Снимок2.PNG
Просмотров: 429

Размер: 5.8 Кб



0



0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

29.08.2020, 21:47

 [ТС]

7

Jel,

Цитата
Сообщение от Write
Посмотреть сообщение

*путь до папки с программой* *путь до папки с программой**название файла.exe*

Цитата
Сообщение от Write
Посмотреть сообщение

Так как по примеру путь прописывается дважды.

Это не лишняя папка, просто путь от ярлыка по примеру я писала дважды.

bat файл заработал после того как я единожды написала путь и я поняла что сглупила с этим.
Ярлык так же заработал, после того как написала всё по примеру Vovsla и написала путь единично, но дополнительно надо было в свойствах ярлыка удалить текст из строчки «рабочая папка».



0



Робот сгибальщик

831 / 456 / 95

Регистрация: 29.07.2020

Сообщений: 2,343

Записей в блоге: 7

29.08.2020, 21:49

8

Цитата
Сообщение от Write
Посмотреть сообщение

Ярлык так же заработал,

Когда знаешь — всё просто!



0



0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

29.08.2020, 21:59

 [ТС]

9

Теперь у меня появилась совсем иная проблема, когда ярлык написан через относительный путь он не видит базу данных, которая лежит с программой в одной папке, а мне не хотелось бы копировать БД к ярлыку, так как это будет совершенно две разные БД.

Добавлено через 6 минут
Только это уже совсем другая история, так что всем спасибо большое.



0



Робот сгибальщик

831 / 456 / 95

Регистрация: 29.07.2020

Сообщений: 2,343

Записей в блоге: 7

30.08.2020, 07:52

10

Цитата
Сообщение от Write
Посмотреть сообщение

не видит базу данных, которая лежит с программой в одной папке, а мне не хотелось бы копировать БД к ярлыку

Тогда, вам поможет только батник:

cd Service Centre OrdersDebug
Service Centre Orders.exe

Кстати, bat файл можно компилировать в exe. Например с помощью программы Bat to exe converter. Разобраться там не сложно. И использовать их, например на флешке или сетевом диске:

Создать ярлык с относительным путём



1



0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

30.08.2020, 11:30

 [ТС]

11

Цитата
Сообщение от Jel
Посмотреть сообщение

cd Service Centre OrdersDebug
Service Centre Orders.exe

С таким текстом программа не открывается почему-то.
Писала вот так:
cd «» » Service Centre OrdersDebugService Centre Orders.exe»
И так:
cd Service Centre OrdersDebugService Centre Orders.exe
И так:
cd «Service Centre OrdersDebugService Centre Orders.exe»
При открытии просто ничего не происходит

Цитата
Сообщение от Jel
Посмотреть сообщение

И использовать их, например на флешке или сетевом диске

С такой целью я и хочу сделать ярлык с относительным путём, чтоб при переносе папки на флешку или другой компьютер всё работало.



0



Робот сгибальщик

831 / 456 / 95

Регистрация: 29.07.2020

Сообщений: 2,343

Записей в блоге: 7

30.08.2020, 13:52

12

Лучший ответ Сообщение было отмечено Write как решение

Решение

Нужно применить именно 2 команды последовательно.
1. Перейти в каталог: [CD Каталог] (слэш перед первой папкой желательно оставить, на случай если батник будет лежать не в корне диска).
cd Service Centre OrdersDebug
2. Запуск файла: [Имя.exe]
«Service Centre Orders.exe»

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



1



0 / 0 / 0

Регистрация: 20.04.2020

Сообщений: 26

30.08.2020, 14:26

 [ТС]

13

Jel,
Слэш оказался не нужен, с ним запускаться не хотело, убрав его всё запустилось и базу данных видит.

Вот так написала:

cd «Service Centre OrdersDebug»
«Service Centre Orders.exe»

Спасибо огромное.



0



Робот сгибальщик

831 / 456 / 95

Регистрация: 29.07.2020

Сообщений: 2,343

Записей в блоге: 7

30.08.2020, 14:41

14

Ну и вишенка на торт:
Если ваша программа имеет файлы .exe обеих разрядностей, к примеру (Service Centre Orders.exe и Service Centre Orders_x64.exe) и в среде Windows 64 bit желательно запускать файл x64, можно применить нехитрый приём.
1 п. оставляем
cd «Service Centre OrdersDebug»

А во втором пункте применяем проверку условия:
IF EXIST «%ProgramFiles(x86)%» (Service Centre Orders_x64.exe) Else (Service Centre Orders.exe)

Дословно на русский — команда проверяет наличие системной переменной ProgramFiles(x86), а это уже факт разрядности Оси 64 bit. Если условие выполняется — запускает файл (x64) иначе (х86).



4



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.08.2020, 14:41

14

Я уже не раз писал, что начал переходить на portable версии некоторых программ. Соответственно, я так же использую эти версии, для того чтобы иметь нужный софт всегда под рукой, т.е. на флешке:) Но, зачастую, папка с программой выглядит как обычная свалка файлов и каждый раз искать в ней файл .exe для запуска программы не очень удобно. Поэтому я начал искать возможность, как бы создать ярлыки, которые можно разместить в корень флеш-карты, которые будут запускать необходимые программы и главное на любом компьютере, куда бы я не вставил эту флешку. Понятное дело, что обычные ярлыки с абсолютными ссылками в данном случае нам не подходят, поэтому я стал искать возможность создания ярлыка с относительной ссылкой (то есть со ссылкой на файл, относительно ярлыка). И, к счастью, я нашел способ это сделать.

1) Для начала разъясню, что у меня где находится. К примеру, я хочу создать ссылку на файл X-ApacheOpenOffice.exe, который находится в папке «флеш-карта:SoftOpenOffice«. Ярлык мне нужен в корне флеш-карты. Хотя я так же опишу, как можно создать ярлык в отдельной папке с ярлыками на той же флешке.

Для начала разъясню что у меня где находится. К примеру, я хочу создать ссылку на файл X-ApacheOpenOffice.exe, который находится в папке "флеш-карта:SoftOpenOffice". Ярлык мне нужен в корне флеш-карты. Хотя я так же опишу, как можно создать ярлык в отдельной папке с ярлыками на той же флешке.

2) Так что возвращаемся в корень флешки. Жмём правой клавишей по пустому месту и выбираем «Создать» — «Ярлык».

Так что возвращаемся в корень флешки. Жмём правой клавишей по пустому месту и выбираем "Создать" - "Ярлык".

3) Указываем путь в следующем виде:

%windir%system32cmd.exe /C start /B /D *путь до папки с программой* *путь до папки с программой**название файла.exe*

При указании пути нужно писать обратный слеш ««. У меня это будет выглядеть вот так:

%windir%system32cmd.exe /C start /B /D SoftOpenOffice SoftOpenOfficeX-ApacheOpenOffice.exe

Указываем путь в следующем виде:  %windir%system32cmd.exe /C start /B /D *путь до папки с программой* *путь до папки с программой**название файла.exe*  При указании пути нужно писать левый слеш "".

Теперь небольшое пояснение: если вы хотите разместить ярлыки в отдельной папке (к примеру, в корне создали дополнительную папку), то вам нужно указать командной строке, что она должна вернуться на папку назад. Для этого перед первым слешом в пути ставим точку «.«. То есть, в моем случае это выглядело бы уже вот так:

%windir%system32cmd.exe /C start /B /D .SoftOpenOffice .SoftOpenOfficeX-ApacheOpenOffice.exe

4) Жмём Далее и вводим имя для нового ярлыка. Жмём «Готово».

Жмём далее и вводим имя для нового ярлыка. Жмём "Готово".

5) Открываем свойства нового ярлыка, переходим на вкладку «Ярлык«. И удаляем содержимое поля «Рабочая папка«.

Открываем свойства нового ярлыка, переходим на вкладку "Ярлык". И удаляем содержимое поля "Рабочая папка".

6) Для того, чтобы при запуске не отображалось окно командной строки (полсекунды, но некоторых раздражает), в поле «Окно» выбираем «Свернутое в значок«:

Для того, чтобы при запуске не отображалось окно командной строки (полсекунды, но некоторых раздражает) в поле "Окно" выбираем "Свернутое в значок".

7) На этой же вкладке жмём кнопку «Сменить значок» внизу окна и в открывшемся окне открываем исполняющий файл программы, на которую создаем ярлык. Выбираем ярлык и  жмём Ок. На окне свойств так же жмём ОК.

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

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

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

На этом всё. Надеюсь эта статья оказалась вам полезной, нажмите одну из кнопок ниже, чтобы рассказать о ней друзьям. Также подпишитесь на обновления сайта, введя свой e-mail в поле справа.

Спасибо за внимание :)

Материал сайта Skesov.ru

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(14 голосов, среднее: 4 из 5)

Поделитесь с друзьями!

В наших проектах мы постоянно работаем с файлами:

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

Но при этом в одних проектах мы пишем просто имя файла, например 'data.json', а в других — вот так: '/Users/mike/server/data.json'. Или в одном месте подключаем скрипт командой

<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>

а в другом — командой <script src="script.js"></script>

Всё дело в том, что в разных ситуациях нам нужно указывать абсолютный путь к файлу (длинная запись), а в других — относительный (короткий). Посмотрим, что это — во имя компьютерной грамотности. 

Абсолютный путь к файлу

Абсолютный (он же полный) путь — это когда мы указываем все диски и папки, в которые нужно зайти, чтобы добраться до нужного файла.

В Windows всё начинается с диска — это может быть C:, D: или диск с любой другой буквой. Если на диске C: сделать папку Thecode, внутри неё — папку Media, а в Media положить файл «статья.txt», то абсолютный путь к этому файлу будет такой:

C:ThecodeMediaстатья.txt

Полный путь к файлу в Windows формируется так: Диск → все вложенные папки → имя файла. Обратите внимание — названия дисков, папок и файлов отделяются друг от друга обратной косой чертой.

CThecodeMediaстатья.txt ← пропущено двоеточие после буквы диска.

C: Thecode Media статья.txt ← нет разделителей между названиями папок и файлов.

C:ThecodeMedia ← это путь к папке, но имя файла не указано.

В MacOS у дисков нет отдельной назначенной буквы, поэтому всё начинается с корневой папки /, внутри которой и находятся все остальные папки. 

Кстати, в MacOS, Linux и любой UNIX-подобной файловой системе все диски — это тоже папки. Например, когда мы делали скрипт для бэкапа, то флешка с названием WIN10_64 находилась по такому адресу: /Volumes/WIN10_64. А всё потому, что все новые диски по умолчанию подключаются как папки внутри папки /Volumes.

Ещё одно отличие MacOS и Linux в том, что вместо обратной косой черты используется просто косая черта, у которой наклон в другую сторону: /. Всё остальное работает по тому же принципу: в абсолютном пути мы собираем все папки, которые нужно пройти, начиная с корня.

Например, если у нас есть в документах папка Notes, внутри которой лежит markdown-файл с задачами на день tasks.md, то полный путь к нему будет в MacOS выглядеть так:

/Users/mike/Documents/Notes/tasks.md

Что такое абсолютный и относительный путь к файлу

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

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

Относительный путь к файлу

Относительный путь — это путь к файлу относительно текущего каталога. Текущий каталог — это тот, в котором запускается скрипт, программа или открывается страница в браузере.

Например, если мы в папку Notes из примера выше положим файлы нашего калькулятора на JavaScript, то абсолютные пути к каждому файлу будут выглядеть так:

/Users/mike/Documents/Notes/index.html
/Users/mike/Documents/Notes/style.css
/Users/mike/Documents/Notes/script.js

Видно, что путь к файлу отличается только именем, потому что они все лежат в одной папке. В этом случае используют относительный путь к файлу, просто указывая его имя:

index.html
style.css
script.js

Когда браузер встретит такой путь, он возьмёт путь к каталогу, где лежит страница, и в нём будет искать эти файлы. А если нам понадобится файл data.json из папки Documents, которая лежит уровнем выше, то мы можем обратиться к нему так: 

../data.json

Первая точка означает текущий каталог, вторая — на уровень выше, а косая черта — что нам нужно зайти в тот каталог и взять оттуда файл data.json.

Что такое абсолютный и относительный путь к файлу

Когда что использовать

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

Общее правило будет такое: если вы работаете со своими файлами, лучше указывать относительный путь, а если нужен чужой файл из интернета — то абсолютный.

Вёрстка:

Кирилл Климентьев

OSX I can do this:

someCommand -someOtherParameter ../../../../../ThisFileIsNeeded -yetAnotherParameter

When I try to do the same thing on Windows it yields:

«The system cannot find the file specified»

because the result path is something like:

c:myFolderotherFolderIamHere........ThisFileIsNeeded

How can I write relative paths for windows cmd?

asked Nov 21, 2017 at 21:25

distante's user avatar

Relative paths

Paths, and relative ones, work very similar to what you have in OS X/macOS.

  • Windows uses «», not «/».
  • Basically «..» is one level higher
  • «.» is a sub-folder of the current working directory

Example

If you are located in c:devreposrepo1 and you want to do something with a file located in c:devbin (example below for PowerShell).

C:devreposrepo1> Start-Process ....binmy_executable.exe

Command line above in words:

Start a process using the file my_executable.exe found (with starting point in the current directory (relative path)) by going two directories back up and then down in to directory bin.

Sub Folder Example If you are located in c:devreposrepo1 and you want a sub-folder My_Projectrepo1.exe (example below for PowerShell).

C:devreposrepo1> Start-Process .My_Projectrepo1.exe

It seems to me that you do know how relative paths work. Reply with exact commands so that I can reproduce what you’re trying.

Daniel B's user avatar

Daniel B

57k9 gold badges115 silver badges151 bronze badges

answered Nov 21, 2017 at 21:48

Tim Kilåker's user avatar

5

OSX I can do this:

someCommand -someOtherParameter ../../../../../ThisFileIsNeeded -yetAnotherParameter

When I try to do the same thing on Windows it yields:

«The system cannot find the file specified»

because the result path is something like:

c:myFolderotherFolderIamHere........ThisFileIsNeeded

How can I write relative paths for windows cmd?

asked Nov 21, 2017 at 21:25

distante's user avatar

Relative paths

Paths, and relative ones, work very similar to what you have in OS X/macOS.

  • Windows uses «», not «/».
  • Basically «..» is one level higher
  • «.» is a sub-folder of the current working directory

Example

If you are located in c:devreposrepo1 and you want to do something with a file located in c:devbin (example below for PowerShell).

C:devreposrepo1> Start-Process ....binmy_executable.exe

Command line above in words:

Start a process using the file my_executable.exe found (with starting point in the current directory (relative path)) by going two directories back up and then down in to directory bin.

Sub Folder Example If you are located in c:devreposrepo1 and you want a sub-folder My_Projectrepo1.exe (example below for PowerShell).

C:devreposrepo1> Start-Process .My_Projectrepo1.exe

It seems to me that you do know how relative paths work. Reply with exact commands so that I can reproduce what you’re trying.

Daniel B's user avatar

Daniel B

57k9 gold badges115 silver badges151 bronze badges

answered Nov 21, 2017 at 21:48

Tim Kilåker's user avatar

5

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

Если компонент пути является именем файла, он должен быть последним компонентом.

Каждый компонент пути также будет ограничен максимальной длиной, указанной для определенной файловой системы. В общем, эти правила делятся на две категории: короткие и длинные. Обратите внимание, что имена каталогов хранятся в файловой системе как особый тип файла, но правила именования для файлов также применяются к именам каталогов. Таким образом, путь — это просто строковое представление иерархии между всеми каталогами, которые существуют для конкретного файла или имени каталога.

Полные и относительные пути

Для функций Windows API, которые управляют файлами, имена файлов часто могут быть относительно текущего каталога, в то время как некоторые API требуют полного пути. Имя файла относится к текущему каталогу, если оно не начинается со следующего:

  • UNC-имя любого формата, которое всегда начинается с двух символов обратной косой черты («\»).
  • Обозначение диска с обратной косой чертой, например » C:»или» d:».
  • Одну обратную косую черту, например, «каталог » или «file.txt» Это также называется абсолютным путем.

Если имя файла начинается только с дискового указателя, но не с обратной косой черты после двоеточия, оно интерпретируется как относительный путь к текущему каталогу на диске с указанной буквой. Обратите внимание, что текущий каталог может быть или не быть корневым каталогом в зависимости от того, на что он был установлен во время последней операции «изменить каталог» на этом диске. Примеры такой формат выглядит следующим образом:

  • «C: tmp.txt » относится к файлу с именем «tmp.txt » в текущем каталоге на диске C.
  • «C:tempdirtmp.txt » относится к файлу в подкаталоге к текущему каталогу на диске C.

Путь также считается относительным, если он содержит «две точки»; то есть два периода вместе в одном компоненте пути. Этот особый спецификатор используется для обозначения каталога над текущим каталогом, иначе известный как «родительский каталог». Примеры такого формата выглядит следующим образом:

  • «.. tmp.txt » указывает на файл с именем tmp.txt, который расположен в родительском каталоге текущего каталога.
  • «…. tmp.txt » указывает на файл, который расположен выше двух каталогов над текущим каталогом.
  • «.. tempdirtmp.txt » указывает файл с именем tmp.txt, который находится в каталоге с именем tempdir в том же каталоге текущего каталога.

Относительные пути могут объединять оба типа примеров, например » C:..tmp.txt «. Это полезно, потому что, хотя система отслеживает текущий диск вместе с текущим каталогом этого диска, она также отслеживает текущие каталоги в каждом из разных букв диска (если ваша система имеет более одного), независимо от того, какой диск обозначается как текущий диск.

Максимальное ограничение длины пути

В API-интерфейсе Windows (с некоторыми исключениями, которые будут обсуждаться в следующих параграфах), есть максимальная длина пути в max_path, которая определяется как 260 символов. Локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, компоненты имени, разделенные обратной косой чертой, и завершающий нулевой символ. Например, максимальный путь на диск D «D:some 256-символьный путь строку

«, где » » представляет собой невидимый символ NULL для текущей кодовой странице системы. (Символы < > используются здесь для наглядности и не могут быть частью допустимой строки пути.)

Функции файлового ввода/вывода в Windows API конвертируют «/» в «» в рамках преобразования имени в НТ-имя типа, за исключением случаев использования «\?» префикса.

В Windows API есть множество функций, которые также имеют версии в формате юникода, чтобы разрешить путь расширенной длины для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов, разделенных обратными косыми чертами, каждый до значения, возвращаемого в параметре Lpmaximumcomponentlength функции GetVolumeInformation (это значение обычно составляет 255 символов). Чтобы указать путь расширенной длины, используйте»\?» префикс. Например?\» ?D:очень_длинный_путь».

Обратите внимание, что максимальный путь 32 767 символов является приблизительным, потому что»\? «префикс может быть расширен до более длинной строки системой во время выполнения, и это расширение применяется к общей длине.

Этот же префикс также можно использовать с путями, построенными в соответствии с универсальным соглашением об именовании (UNC). Чтобы указать такой путь с помощью UNC, используйте»\? UNC». Например?\» ,UNC-путь серверобщий_ресурс», где «сервер» — имя компьютера и » общий_ресурс » — имя общей папки. Эти префиксы не используются как часть самого пути. Они указывают, что путь должен быть передан системе с минимальным изменением, а это означает, что вы не можете использовать прямые косые черты для представления разделителей пути, или точку для представления текущего каталога, или двойные точки для представления родительского каталога. Так как вы не можете использовать «\? «префикс с относительным путем, относительные пути всегда ограничены в общей сложности числом символов MAX_PATH.

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

При использовании API для создания каталога указанный путь не может быть таким длинным, что невозможно добавить Имя файла 8.3 (то есть имя каталога не может превышать MAX_PATH минус 12).

Оболочка и файловая система имеют различные требования. Можно создать путь с API Windows, который пользовательский интерфейс оболочки не в состоянии интерпретировать должным образом.

Начиная с Windows 10 версии 1607, ограничения MAX_PATH были удалены из общих Win32 файлов и каталогов функций. Тем не менее необходимо выбрать новое поведение. Рееста позволяет включить или отключить новое поведение длинного пути. Для включения длинных путей установить ключ реестра в

HKLMSYSTEMCurrentControlSetControlFileSystem LongPathsEnabled (Тип: reg_dword).

Значение ключа будет кэшироваться системой (на процесс) после первого вызова файла Win32 или функции каталога .Раздел реестра не будет перезагружен в течение всего срока действия процесса. Для того, чтобы все приложения в системе распознали значение ключа, может потребоваться перезагрузка, потому что некоторые процессы могли начаться до того, как ключ был установлен.

Вы также можете включить новое поведение длинного пути для каждого приложения через манифест:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true
    </windowsSettings>
</application>

Эти функции управления каталогами, которые не будут иметь ограничения в max_path если вы включите длинные пути: CreateDirectoryW, CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW.


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Windows, теория программирования, операционные системы

Понравилась статья? Поделить с друзьями:
  • Как загрузить ноутбук в безопасном режиме windows 7 на ноутбуке
  • Как задать отключение компьютера в заданное время в windows 10
  • Как загрузить восстановление системы windows 10 через биос
  • Как загрузиться в обычном режиме windows 10
  • Как загрузить ноутбук в безопасном режиме windows 10 при включении