868_____________________________________________Глава 14

создаст не только каталог Testi, но и его родительский каталог Test, если он от-
сутствует. Проверить, создан ли нужный каталог этой функцией, можно с помо-
щью функции DirectoryExists.

Функции getcurdir и GetCurrentDir позволяют определить текущий каталог
на заданном или текущем диске.

Функция API Windows GetSystemDirectory, заносит в буфер строку, характе-
ризующую системный каталог Windows. Это тот каталог, в котором размещены
файлы библиотек, драйверов, шрифтов. Приложение не должно создавать ка-
кие-то файлы в системном каталоге. Создавать свои файлы можно в каталоге, воз-
вращаемом другой аналогичной функцией — GetWindowsDirectory, дающей путь
к каталогу Windows. Этот каталог содержит файлы приложений Windows, файлы
инициализации .ini и файлы справок .Ыр. В этом каталоге вы можете хранить
файлы инициализации и файлы справок своего приложения. Если приложение со-
здает другие файлы, которые вы хотите хранить, не допуская к ним других поль-
зователей, то помещайте их в каталог, указанный в переменной окружения
НОМЕРАТН. При соответствующей установке этот каталог различен для всех по-
льзователей.

Параметр IpBuffer функций GetSystemDirectory и GetWindowsDirectory яв-
ляется указателем на строку с нулевым символом в конце, в которую передается
найденный путь. Этот путь записывается без заключительного обратного слеша
«\», если только каталог не является корневым.

Параметр uSize указывает максимальный размер буфера в символах. Его ве-
личина должна быть не менее значения МАХ_РАТН.

При успешном выполнении функции копируют путь в IpBuffer и возвращают
число символов в строке, не считая последнего нулевого. Если длина строки боль-
ше, чем uSize, то возвращенное значение позволяет узнать требуемый размер бу-
фера.

Если функция не смогла успешно завершиться, то она возвращает нулевое
значение. В этом случае узнать причину отказа можно, вызвав GetLastError (см.
раздел 14.20).

Приведем пример. Если ваш системный каталог Windows назван
WINDOWS\SYSTEM и расположен на диске С:, то операторы

char s[MAX_PATH];

GetSystemDirectory(s,MAX_PATH) ;

занесут в s путь: C:\WINDOWS\SYSTEM. Полученный путь можно, например, ис-
пользовать для проверки, имеются ли на компьютере пользователя нужные биб-
лиотеки, драйверы и шрифты.

Функции FileGetAttr, FileSetAttr, _rtl_chmod позволяют определять или
устанавливать атрибуты файла (см. описание атрибутов в разделе 14.12.1). Уста-
навливая атрибуты их можно объединять в одно слово атрибутов операцией пораз-
рядного ИЛИ. Возвращенные функциями FileGetAttr и _rtl_chmod атрибуты
можно проверять с помощью операции поразрядного И.

Функция _rtl_chmod позволяет определить или установить атрибуты файла
(см. их описание в разделе 14.12.1). При func = 0 функция возвращает слово теку-
щих атрибутов файла path, а при func = 1 устанавливает файлу path атрибуты at-
trib. Например, следующий оператор устанавливает для файла, заданного строкой
SFile, атрибут «невидимый»:

_rtl_chmod(SFile, I, FA_HIDDEN) ;

Возвращенные функциями FileGetAttr и _rtl_chmod атрибуты можно прове-
рять с помощью операции поразрядного И.

Следующие два оператор добавляют к атрибутам файла, заданного строкой
SFile, атрибут «невидимый»: