Путь файла

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

Путь файла

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

В книгах по компьютерным технологиям можно часто встретить употребление терминов абсолютного и относительного пути к файлам. Часто автор не разъясняет, что означает тот или иной путь.

Читатель, соответственно, путается, когда автор в последствии говорит об использовании абсолютного и(или) относительного пути.

Допустим, у Вас есть сайт и Вам нужно создать гиперссылку(ссылку) на одну из страниц сайта. Здесь нужно выбрать какой использовать тип пути: относительный или абсолютный.

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

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

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

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

Когда ссылка представляет из себя полный URL файла или страницы, это и есть абсолютный путь. При этом в адресе должен присутствовать используемый протокол. Например, http://www.uamedwed.

com — это абсолютный путь к конкретному веб-сайту. В данном случае абсолютный путь к главной странице моего блога. Где протоколом является http, а www.uamedwed.com доменом(именем).

Если указывать ссылку на католог, например http://yourdomain.ua/web/ то будет загружаться(отображаться) индексный файл. Это правило применимо в основном к статическим сайтам. Так как при использовании языка программирования можно создать внутренний роутинг.

Индексный файл обычно представляет из себя файл с именем index.php, index.html, index.phtml, index.shtml. Для того что бы использовать другой индексный файл, нужно создать в нужной директории файл с именем .htaccess, и в нем прописать некоторую директиву. Изменение и создание файла .

htaccess, как и роутинг с помощью языка программирования, выходит за рамки этой статьи.

В основном абсолютный путь используется, тогда, когда нужно сослаться на другой сайт. Иными словами если Вы хотите отправить посетителя на другой сайт, то нужно использовать абсолютный путь. Хотя, такой путь можно использовать и на собственном сайте. Но многие придерживаются того, что ссылки внутри сайта должны быть относительными.

Использование абсолютного пути может повлечь за собой некоторые проблемы. Например при переносе сайта с локальной машины на сервер(это в том случае, если вы использовали на локальной машине адреса в виде http://localhost/sitename.ua/…). Трудности могут возникнуть, тогда, когда появится необходимость в смене домена(имени сайта).

Хотя, все эти трудности решаемы, но на них придётся потратить некоторое количество времени.

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

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

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

Немного отступив от темы хочу вкратце рассказать про то что такое URL.

Каждая веб-страница или документ в сети Интернет имеет собственный уникальный адрес, который и называется URL.
URL — единообразный локатор (определитель местонахождения) ресурса. Расшифровывается URL как Uniform Resource Locator(унифицированный адрес ресурса).

Можно так же встретить и такую расшифровку как Universal Resource Locator(универсальный локатор ресурса). Этот способ записи адреса стандартизирован в сети Интернет. Более общая и широкая система идентификации ресурсов URI постепенно заменяет термин URL.

URI — это символьная строка, которая идентифицирует какой-либо ресурс: документ, файл, и т.д. Конечно, здесь подразумеваются ресурсы сети Интернет.

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

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

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

Путь относительно документа

Именно путь относительно документа используется чаще всего. Такие ссылки ещё называются локальными. В основном такой путь используется тогда, когда текущий и связанный документ(страница) находятся в одной директории.

Если переместить документ в другую директорию, то путь(ссылку) придётся менять. Хотя можно ссылаться и на документы(страницы) из других директорий. Для этого путь прописывается от текущего документа до целевого документа(страницы).

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

Предположим, что каждое изображение в каталоге images нужно вставить в соответствующие страницы home.html, products.html, contact.html.

Для того что бы вставить изображение к примеру на страницу «home.html», нужно прописать путь, где расположено изображение.

Если использовать путь относительно документа, то нужно будет прописать в коде страницы следующее:

Этот код для вставки изображения на страницу — неполный. Так как он не содержит нескольких важных атрибутов, таких как ширина, высота и др. Атрибут src, здесь служит для указания пути к файлу. Здесь опущены все остальные атрибуты, так как они сейчас не столь важны.

Главное сейчас, что бы Вы имели представление о том, как выглядит путь относительно документа.При использовании путей относительно документа отсутствует часть абсолютного пути. Часть абсолютного пути, здесь усекается, как для текущего документа(страницы), так и для связанного.

Здесь используется только та часть пути, которая всегда меняется.

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

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

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

Как видно из приведённого выше кода, к пути теперь добавилось следующее: ../. Как раз эта последовательность символов ../ и служит для перехода на одну директорию(уровень) выше в иерархии каталогов.

Путь в вышеприведённом коде можно прочесть так: «Перейти на один каталог выше(назад), зайти в директорию images и взять от туда файл products.png«.
Если ..

/ означает переход на одну директорию(уровень) выше в иерархии каталогов, то символ / обозначает переход на один уровень ниже.
Последовательность символов ../ можно использовать в пути неоднократно.

Например, если файл products.html переместить в три директории вложенные в друг друга, то нужно будет использовать следующий код:

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

Путь относительно корня сайта

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

Но такая проблема решаема при использовании путей относительно корня сайта. Где путь указывается от корневой директории до документа.
Все пути относительно корня сайта начинаются со знака /.

Только здесь, в отличии от путей относительно документа этот знак используется для указания корневой директории. Потому, что он используется в начале пути.
Путь относительно корня сайта позволяет перемещать некоторые файлы, без ущерба для ссылок.

Этот тип пути Вы сможете использовать только на web-сервере в интернете, или на web-сервере расположенном на локальной машине.

В качестве web-сервера на локальной машине может выступать — XAMPP. Который позволит у себя на компьютере создать среду для созданию сайтов и их предварительного тестирования.

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

Например, /images/products.png обозначает, что файл products.png находится в папке images, которая расположена в корневом каталоге.

Самый простой способ определить корневой относительный путь — взять абсолютный и отбросить http:// и имя хоста.

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

Допустим есть файл _contact.html, который содержит информацию о телефонных номерах, e-mail и содержит изображение contact.png.

(Пускай это будет небольшая таблица, которая будет располагаться на каждой странице сайта.)

Следующий код предназначен для вставки изображения «contact.png».

Код, который необходим для вставки одного файла в другой, выходит за рамки этой статьи. Здесь все зависит от используемого языка программирования.

Я надеюсь, что Вы уже знаете какой тип пути использовался в вышеприведённом коде. Если нет, тогда посмотрите приведённое выше определение пути относительно документа.
Теперь, когда посетитель зайдет на такие страницы сайта как home.html, contact.ntml, он увидит прекрасно отображаемую страницу.

В каждую из которых вставлен файл _contact.html, в который, в свою очередь, вставлено изображение contact.png.
Другими словами зайдя, к примеру, на страницу home.html, происходит следующее: «Выполняется код основной страницы home.html.

Затем вставляется и исполняется код страницы _contact.html. Код страницы _contact.html, говорит что нужно перейти в директорию images и взять от туда изображение contact.png«.
Если опустить сам код для вставки, то все работает отлично.

Но вот если запустить страницу products.html, то произойдет ошибка. Так как код будет пытаться найти директорию images и файл contact.png в директории products. Но такой директории там не существует, из за чего собственно и возникает проблема.

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

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

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

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

Теперь изображение будет корректно вставляться на любой из страниц сайта.

Надеюсь я немного помог Вам разобраться в том какие пути существуют, и в том когда и где они используются. Теперь можно использовать все типы пути по прямому их назначению.

Источник: https://www.uamedwed.com/blog/web/absolyutnyj-i-otnositelnyj-put-k-fajlam.html

Как указать путь к файлу: основные правила

Путь файла

Несмотря на достаточно высокую автоматизацию всех процессов и пользовательских действий, которые предусмотрены в Windows-системах, иногда возникает необходимость ручного задания пути к какому-то объекту, хранящемуся на локальных дисках или на удаленных серверах в Интернете.

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

Что такое путь к файлу, каталогу, диску или веб-странице?

Для начала давайте определимся с основным понятием пути файла.

Что это такое? Грубо говоря, путь к любому объекту представляет собой полную или сокращенную ссылку на его физическое местоположение на жестком диске или в Интернете (но тоже на жестком диске удаленного сервера или компьютера). В некотором смысле компьютерное указание пути можно сравнить со всем привычным почтовым адресом, где вы проживаете.

Так, например, в адресе указывается страна, город, улица, дом, корпус, квартира и имя жильца. Аналогия здесь такая:

  • страна – диск или удаленный сетевой ресурс;
  • имя жильца или адресата – название конечного файла;
  • все остальное – промежуточные подпапки.

Многие могут заметить, что в почтовом адресе указывается еще и индекс города. Его чисто условно можно соотнести, скажем, с IP-адресом страницы в Интернете или в сетевом окружении, поскольку для локальных ресурсов такие пути практически никогда не используются.

Теперь давайте посмотрим, как указать путь к файлу, исходя из такой аналогии. Для начала рассмотрим локальные ресурсы, то есть носители, подключенные непосредственно к одному компьютеру.

Типы путей

Но тут сразу стоит сделать еще одно небольшое отступление. При указании пути к любому объекту нужно учитывать, что они могут быть либо абсолютными (полными), либо относительными (сокращенными).

Полные пути применяются для указания точного местоположения искомого объекта, а относительные предназначены для объектов, которые могут находиться в определенных папках, для которых указывать их расположение изначально не нужно (это чаще всего применяется в веб-программировании при создании ссылок для перехода к документу).

Как записывать путь к файлу в Windows-системах: общие правила

Но это все пока что была теория. Перейдем к практике.

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

Теперь отдельно стоит сказать о том, как указать путь к файлу, находящемуся на удаленном сервере (в Интернете). Понятно, что в этом случае точно определить букву диска вы не сможете. Собственно, это и не нужно.

В качестве абсолютного пути указывается последовательность, в которой первым вписывается название протокола (например, http, https и т. д.). Затем ставится двоеточие, указывается двойной правый слэш.

После этого через одинарный правый слэш прописываются все промежуточные страницы (ресурсы).

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

Как узнать, где находится файл?

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

В случае с папками в адресной строке путь можно будет скопировать, используя для этого пункт меню ПКМ «Копировать адрес как текст», а затем вставить в нужное место, дописав название файла вручную. Однако можно использовать свойства самого файла, где тоже будет указана директория, в которой он находится.

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

Методы быстрого копирования путей и открытия нужных файлов

Как указать путь к файлу, немного разобрались. Теперь кратко остановимся на некоторых методах, позволяющих ускорить открытие файлов или копирование их адресов (путей).

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

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

Если же это какой-то документ, он будет автоматически открыт в сопоставленном ему приложении.

Напоследок остается добавить, что очень часто может потребоваться использовать консоль «Выполнить».

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

Почему? Да только потому, что меню «Выполнить» в основном предназначено для вызова исполняемых апплетов (обычно EXE-формата и некоторых других), находящихся по умолчанию либо в директории System32, либо в каталоге Windows.

Например, для запуска редактора реестра достаточно вписать только имя файла regedit, для старта стандартного «Блокнота» – notepad, для командной строки – cmd и т. д. В принципе, если выполнить некоторые нехитрые настройки, для такого типа быстрого запуска можно указать любое приложение или какой-то документ, но это уже отдельная тема для разговора.

Источник: https://FB.ru/article/472820/kak-ukazat-put-k-faylu-osnovnyie-pravila

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

Путь файла

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

Итак, начнем с определения самого термина «путь»:

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

Википедия

Если говорить о сайтах, то путь — это то же, что и ссылка. Ссылки могут быть абсолютными и относительными. Рассмотрим оба варианта более подробно.

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

Абсолютный адрес ссылки на файл включает в себя протокол (например, http://), имя сайта в Сети, подкаталог (или несколько подкаталогов), название файла. Пример того, как выглядит абсолютный URL:

https://www.google.com/images/branding/googlelogo.png

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

background-image: url(http://www.example.com/img/bg.png);

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

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

С относительным адресом всё намного интереснее — он может отсчитываться как от корня сайта, так и от текущего документа.

Корневой относительный путь — это путь, который указывает на расположение файла относительно корневого каталога сайта.

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

background-image: url(/img/bg.png);

Как легко определить корневой относительный адрес? Просто возьмите абсолютную ссылку и уберите из нее протокол и название домена, оставив слэш и все символы, которые идут дальше.

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

Пример I

Если наша таблица стилей style.css и файл с фоновым рисунком bg.png находятся в одной папке (не обязательно корневой), то относительный путь от таблицы до рисунка будет выглядеть так:

background-image: url(bg.png); /* вы просто пишете имя файла */

Пример II

Если таблица стилей находится в корне, а рисунок — в папке img, относительная ссылка будет таковой:

background-image: url(img/bg.png); /* слэш в начале не нужен */

Пример III

Если таблица стилей находится в папке, а рисунок соседствует с этой папкой, то относительный путь будет таким:

background-image: url(../bg.png); /* две точки — подняться на один уровень */

Пример IV

Если таблица стилей находится в двух папках, а рисунок соседствует с первой папкой, то относительный путь будет следующий:

background-image: url(../../bg.png); /* поднимаемся на два уровня */

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

background-image: url(../../../../bg.png);

В том случае, когда рисунок спрятан в папку img, а таблица стилей — в папку css, вам понадобится выйти из папки css и зайти в папку img. Вот так:

background-image: url(../img/bg.png);

Если папок несколько, необходимо также прописать их. Изменим предыдущий пример: представим, что в папке img есть еще одна папка backgrounds, в которой лежит наш рисунок. Относительный путь будет таким:

background-image: url(../img/backgrounds/bg.png);

Какой путь лучше использовать

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

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

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

Относительный путь от документа — наилучший вариант при веб-разработке на локальной машине без использования сервера.

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

Они будут работать и на живом сайте, но с одним условием — если не перемещать таблицу стилей в другое место (иначе придется корректировать пути).

Попробуйте потренироваться в использовании относительных путей как на локальном компьютере, так и на веб-сервере. Понимание того, как это работает, непременно пригодится вам в любом проекте.

Далее в учебнике: свойство background-repeat — управление повтором фонового изображения.

Источник: https://idg.net.ua/blog/uchebnik-css/ispolzovanie-css/otnositelnyj-i-absolyutnyj-put-k-fajlu

Пути к файлам

Путь файла

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

std::string filepath(“C:\\тест”);
std::ofstream file(filepath.c_str());

Если кратко, то использование не ASCII символов в строковых константах char может привести к печальным последствиям. Я уже обсуждал этот вопрос в посте о кодировках. В данном случае название файла напрямую зависит от кодировки исходника и если кто-то напишет подобное в utf-8, в windows-xp можно получить файл с запрещенными символами, с которым невозможно будет ничего сделать. Можно не использовать не ASCII. Но вы же не можете запретить это пользователю (потоку или БД из которого получен путь). Это же дискриминация по национальному признаку! Срочно исправляемся:

std::wstring filepath= L”C:\тест”
std::ofstream file(filepath.c_str());

Несведущие в стандарте пользователи Visual Studio могут успокоиться, пока нужда не заставит сменить компилятор (точнее STL). И тут начинается… — «дурацкий gcc» или «дурацкий stlport» не содержит конструктор ofstream::ofstream(wchar_t*)
Дело в том, что текущий стандарт и не предполагает его наличия (не трогаем пока C++0x). Это в чистом виде энтузиазм мелкомягких.

Что же делать?

Вариантов несколько

  • Использовать стороннюю библиотеку для работы с путями (к примеру boost::filesystem)
  • Использовать std::locale
  • Придумывать свой

С третьим вариантом все ясно, с первым тоже ничего сложного:

  1. #include
  2. #include
  3. namespace fs = boost::filesystem;
  4. int main(int argc, char* argv)
  5. {
  6.   std::wstring filepath(L”C:\тест”);
  7.   fs::ofstream(filepath);
  8.   return 0;
  9. }

А вот по поводу второго у тех, кто не учил матчасть, могут возникнуть проблемы.

Пользуемся std::locale

Отступление.

Огорчу пользователей mingw: вам придется использовать стороннюю реализацию STL (к примеру stlport) из-за отсутствия в родной правильной поддержки локализации. А точнее, функция std::locale(“”) всегда возвращает std::locale(«C»), что бы там у вас не стояло. Тот же stlport лишен подобного недостатка. О том как слепить связку mingw+stlport+boost я отписал тут.

Все что нам нужно сделать это следовать простым правилам — с не ASCII работаем в «расширенном» виде. То есть, читаем путь в std::wstring, используя соответствующим образом локализованный поток, а при использовании, сужаем по пользовательской локализации.

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

Нам необходимо создать файл по этому пути. Что мы делаем:

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include “facet/codecvt/codecvt_cp866.hpp”
  7. /**@brief Сужает широкую строку, используя локализацию loc
  8.    @return Возвращает суженную строку или пустую суженную строку, в
  9.    случае. если возникла ошибка*/
  10. std::string narrow(const std::wstring& wstr, const std::locale& loc)
  11. {
  12.   const size_t sz = wstr.length();
  13.   if(sz == 0)
  14.     return std::string();
  15.   mbstate_t state = 0;
  16.   char *cnext;
  17.   const wchar_t *wnext;
  18.   const wchar_t *wcstr = wstr.c_str();
  19.   char *buffer = new char[sz + 1];
  20.   std::uninitialized_fill(buffer, buffer + sz + 1, 0);
  21.   typedef std::codecvt cvt;
  22.   cvt::result res;
  23.   res = std::use_facet(loc).out(state, wcstr, wcstr + sz, wnext,
  24.       buffer, buffer + sz, cnext);
  25.   std::string result(buffer);
  26.   if(res == cvt::error)
  27.     return std::string();
  28.   return result;
  29. }
  30. /**@brief Расширяет строку, используя локализацию loc
  31.    @return Возвращает расширенную строку или пустую расширенную строку, в
  32.    случае, если возникла ошибка.*/
  33. std::wstring widen(const std::string& str, const std::locale& loc)
  34. {
  35.   const size_t sz = str.length();
  36.   if(sz == 0)
  37.     return std::wstring();
  38.   mbstate_t state = 0;
  39.   const char *cnext;
  40.   wchar_t *wnext;
  41.   const char *cstr = str.c_str();
  42.   wchar_t *buffer = new wchar_t[sz + 1];
  43.   std::uninitialized_fill(buffer, buffer + sz + 1, 0);
  44.   typedef std::codecvt cvt;
  45.   cvt::result res;
  46.   res = std::use_facet(loc).in(state, cstr, cstr + sz, cnext,
  47.       buffer, buffer + sz, wnext);
  48.   std::wstring result(buffer);
  49.   delete [] buffer;
  50.   if(res == cvt::error)
  51.     return std::wstring();
  52.   return result;
  53. }
  54. int main(int argc, char* argv[])
  55. {
  56.   //Пусть имеется cp866 файл с путем
  57.   std::ofstream ofile(“input.txt”, std::ios::binary);
  58.   if(!ofile)
  59.   {
  60.     std::cerr wpath;
  61.   ifile.close();
  62.   //Создаем по этому пути файл
  63.   std::ofstream file(narrow(wpath, std::locale(“”)).c_str());
  64.   file

Источник: https://habr.com/ru/post/112997/

Путь к файлу

Путь файла

Раздел: Контрольные по информатике / Контрольная № 1

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

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

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

Забегая вперёд, скажу, что есть два способа добраться до файла – используя либо полный путь к файлу, либо относительный путь. Подробнее об этом чуть позже, а пока разберёмся с именем файла.

Имя файла

Имя файла в операционных системах DOS/Windows состоит из трёх частей:

  1. Название (имя).
  2. Разделитель.
  3. Расширение.

ПРИМЕЧАНИЕ
По умолчанию в Windows расширения файлов скрыты, так что в Проводнике вы можете их и не увидеть. Как сделать их видимыми – зависит от операционной системы.

В первых версиях операционной системы DOS имя (то есть первая часть имени файла) не могла иметь длину более 8 символов. Сейчас это ограничение снято.

Однако я настоятельно рекомендую не давать файлам слишком длинные имена.

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

Подробнее см. в бесплатной книге Компьютер для чайника.

Полный путь к файлу

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

Начнём с истоков. Где хранятся файлы? Правильно – на диске.

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

Файл может храниться непосредственно на диске, либо в какой-то папке (каталоге, директории – это разные названия одного и того же объекта – папки). Папки могут быть вложенными другу в друга (как матрёшки).

То есть полный путь файла начинается с буквы диска и заканчивается именем файла. А между ними могут быть имена каталогов. Каталоги в DOS/Windows разделяются косой чертой (\).

Например, у нас на диске С есть папка 000, а в этой папке есть папка 010, а в этой папке тоже есть папка 100. А уже в папке 100 есть файл 111.ТХТ. Тогда полный путь к файлу будет такой:

С:\000\010\100\111.ТХТ

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

С этим вопросом у новичков обычно сложнее. Потому что теорию относительности люди как-то плохо понимают ))))

Разумеется, относительный путь к файлу – это тема намного более простая, чем вышеупомянутая теория Эйнштейна. Поэтому разберёмся и с ней.

Итак, однозначно можно определить местоположение файла, если известен полный путь к нему.

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

Поэтому, чтобы не писать полный путь к файлу для того, чтобы получить к нему доступ, придумали такую штуку как относительный путь.

Сначала давайте вспомним про вложенные папки (каталоги).

Итак, всё начинается с диска. Диск – это корневой каталог. Корневой – потому что он первый в пути, и дальше “расти” уже некуда. Диск – это корень. А дальше растут стволы и ветви (папки), а на ветвях растут листья (файлы).

Соответственно каждая папка имеет родителя (кроме корневого каталога). Но не каждая папка имеет детей (то есть вложенные папки). Что поделаешь – не всем везёт в любви )))

Следовательно, у каждой папки могут быть (а могут и не быть) дочерние папки. И у каждой папки (кроме корневого каталога) есть родительские папки.

Следовательно, в общем случае папка может быть родительской относительно своих “детей”, и дочерней относительно своих “родителей”.

Здесь всё как в жизни – вы чей-то ребёнок, и также чей-то родитель (ну или скоро будете)))

Для вашей мамы вы ребёнок, а для ваших детей – мама (или папа).

А теперь наконец после долгих лирических отступлений перейдём к относительности путей. Итак, снова вспомним наш пример:

С:\000\010\100\111.ТХТ

Здесь каталог 010 является дочерним относительно каталога 000, и он же является родительским по отношению к каталогу 100.

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

Например, если вы работаете в командной строке и находитесь в папке 100 из нашего примера, то для открытия файла 111.ТХТ вам не надо набирать полный путь к файлу – достаточно написать только имя файла.

Имя файла в данном случае и будет относительным путём. То есть относительный путь – это часть полного пути относительно текущего каталога.

Например, вы находитесь в папке 010. То есть выше находятся

С:\000

а ниже находится каталог

100

Тогда относительный путь к файлу 111.ТХТ будет таким:

100\111.ТХТ

Так можно перемещаться вниз относительно текущего местоположения.

А можно ли перемещаться вверх?

Да, можно.

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

Например, если мы находимся здесь: С:\000\010\100, и в папке 010 у нас есть файл 011.ТХТ, то открыть его можно так:

..\011.ТХТ

А если в папке 000 у нас есть файл 001.ТХТ, то открыть его можно так:

..\..\001.ТХТ

Ну и так далее. Надеюсь, смысл вы уловили.

Как прописать путь к файлу

Вернёмся к полному пути, который мы рассмотрели выше:

С:\000\010\100\111.ТХТ

Если у вас есть такие папки и в этих папках есть такой файл, то вы можете ввести этот путь в командной строке, или прописать путь к файлу в адресной строке Проводника и нажать ENTER. Тогда файл откроется (если, конечно, у вас есть программа, которая сможет его открыть и с этой программой связан тип этого файла).

Командную строку можно вызвать комбинацией клавиш WIN+R или через меню ПУСК-ВЫПОЛНИТЬ.

Когда вы откроете командную строку, то можете непосредственно в ней ввести команду (в нашем случае командой будет путь к файлу) и нажать ENTER.

Если же вам любопытно немного помучиться и представить, как люди работали в DOS, то вы можете открыть командный интерпретатор. Для этого в командной строке наберите CMD (для Windows 2000 и выше) или COMMAND (для Windows 95/98/ME) и нажмите ENTER.

Откроется консоль (см. рис.), где вы можете вдоволь натешиться, вводя разные команды. Правда, для этого вы должны их знать – но это уже другая тема…

Если что-то осталось непонятным, то опять же отправляю вас к книге Компьютер для чайника.

Неправильный путь к файлу

Наверняка при работе за компьютером вы получали сообщение о том, что файл не найден, что указан неправильный путь или что-то типа того (см. рис. выше).

Причины подобных ошибок могут быть следующими:

  1. Файл не существует по указанному пути.
  2. Указанный путь не существует (например, вы указали диск D, а на вашем компьютере нет диска с такой буквой).
  3. В имени файла содержатся недопустимые символы (список недопустимых символов у каждой операционной системы свой).
  4. Путь к файлу слишком длинный, и операционная система не может его понять.
  5. Кодировка символов в пути к файлу не соответствует кодировке, установленной в операционной системе (это надо, в основном, программистам – обычные пользователи редко встречаются с такой проблемой).

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

Источник: http://av-mag.ru/referat/info/path-to-file.php

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.