81.3.3.7. РАБОТА С ПУТЯМИ



Разделители путей

	\	Windows (но она понимает и /)
	/	UNIX
	:	Mac


Примеры
	A:\DIRNAME\DIRNAME\FILENAME.EXT			// DOS
	C:\DIRNAME\DIRNAME\FILENAME.EXT:STREAMNAME	// Windows NT
	/DIRNAME/DIRNAME/FILENAME.EXT  			// UNIX
	VOLNAME:DIRNAME:DIRNAME:FILENAME.EXT		// MacOS
	VOLNAME:\DIRNAME\DIRNAME\FILENAME.EXT		// Netware
	VOLNAME:\DIRNAME\DIRANEM\FILENAME.EXT;VER       // VMS



Разделители групп путей set PATH=C:\WINDOWS;C:\BIN ; Windows set PATH=/share/bin:/usr/shar/bin : UNIX


Работа с путями к объектам файловой системы как правило недоступна в библиотеках языков программирования среднего уровня. Поэтому необходимый RTL приходиться писать программистам самим. Собственно есть 3 группы путей: 1) Полностью квалифицированные пути C:\My Documents\myfile.txt // Windows Local Filesystem \\SERVER\Share\myfile.txt // Windows UNIX /user/jim/myfile.txt // UNIX Полностью квалифицированный путь начинается с: / UNIX \\ Windows X:\ Windows одна буква после нее : SYS:\ Netware имя тома может содержать несколько букв Macintosh HD: Собственно для их нормализации нужна обработка . и .. которые могут встречаться внутри: /user/jim/./myfile.txt => /user/jim/myfile.txt /user/jim/../bob/myfile.txt => /user/bob/myfile.txt То есть компонент . просто выкидываем а для компонента .. выкидываем его и ближайший более верхний уровень (при этом следим что бы не выкинуть самый верхний уровень). 2) Частично квалифицированные пути (Они опираются на текущую директорию) myfile.txt => {CURRENT_DIRECTORY}\myfile.txt mydir\myfile.txt => {CURRENT_DIRECTORY}\mydir\myfile.txt .\myfile.txt => {CURRENT_DIRECTORY}\myfile.txt ..\myfile.txt => {CURRENT_DIRECTORY}\..\myfile.txt ./myfile.txt Их можно распознать следущим образом - они начинаются с . или .. или букв Самый неприятный случай: e:myfile.txt => {CURRENT_DIRECTORY_FOR_DRIVE_E}\myfile.txt Проблема в том - что не все системы держат текущую директорию для всех драйвов, и ее можно получить для конкретного тома (например DOS). Под Windows например получить текущую директорию для диска Х: можно так Сохраняем текущую директорию (SAVED) Меняем директорию на "X:" Берем текущую директорию - это ответ на наш вопрос Меняем текущую директорию на SAVED (востанавливаем старое состояние) Эта операция опасная - так как не thread safe. 3) Пути опирающиеся на домашнюю директорию В UNIX shell поддерживает имена директория вида ~ домашняя директория текущего пользователя ~jim домашняя директория пользователя jim Но это поддержка только на уровне shell, на уровне ядра ее нет. Поэтому если вы хотите что бы ваши программы красиво работали вам надо обеспечить это преобразование самому. Имейти в виду ~ и ~jim - это директории, поэтому посли них в пути должен быть разделитель ~/myfile.txt => {ENVIRONMENT[HOME]}/myfile.txt ~jim/myfile.txt => {PASSWDFILE[jim, HOME_DIR_FIELD_INDEX]}\myfile.txt


Index Prev Next