Сборник по задачам и примерам Assembler

     

Определение и изменение текущего каталога



Определение и изменение текущего каталога

Аналогично принципам организации файловой системы MS DOS в Win32 также Иуществует понятие текущего каталога, то есть каталога, в котором выполняются ^шеущие операции по работе с файлами. В отличие от MS DOS понятие текуще-^^Италога относится к текущему процессу. При запуске процесса текущим бу-I дет являться каталог, из которого этот процесс был запущен. Определяет текущий налог процесса функция GetCurrentDirectory.

RD GetCurrentDirectory(OWORD nBufferLength, LPTSTR ipBuffer);

it Параметры TpBuffern и BufferLength определяют соответственно адрес и длину I буфера, в который помещается путь с текущим каталогом (строка с завершаю-Нцим нулем). Функция возвращает NULL в случае ошибки и число байтов, необходимо для записи данных в буфер, в случае удачного завершения. Завершающий ^ нуль в возвращаемом функцией числе не учитывается. Если буфер мал, то с помощью возвращаемого значения можно изменить его размер. [ Изменить текущий каталог процесса можно с помощью функции SetCurrent-^Brectory.

¦6001 SetCurrentDi rectory (LPCTSTR IpszPathName): "

j" Параметр IpszPathName — адрес ASCIIZ-строки с путем, последний элемент ко-I торою — новый текущий каталог данного процесса.

[i Платформа Win32 также поддерживает понятие системного и основного ка-^ВДога Windows. Для определения системного каталога существует специальная |; функция GetSystemDi rectory.

[ GetSystemDirectory(LPTSTR ipszBuffer, UINT uSize):

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

„Для определения основного каталога Windows существует специальная функция

GetWindowsDi rectory.-

UINT GetWindowsDirectorydPTSTR IpBuffer. UINT uSize);

Два параметра этой функции определяют адрес и размер буфера, в которыйзаписывается путь к основному каталогу Windows. Возвращаемое значение количество реально записанных в буфер байтов. Его можно использовать для г корректировки параметра uSize, если он был задан слишком маленьким, и повторного вызова функции GetWindowsDi rectory.


DWORD GetFulIPathNameCLPCTSTR ipFileName. DWORD nBufferLength, LPTSTR ipBuffer.

LPTSTR *lpFilePart): I На входе функция принимает имя файла в виде ASCIIZ-строки. На выходе —

три параметра:

  • IpBuffer — адрес буфера, в который помещается полный путь с именем

    файла;


  • nBufferLength — длина буфера, на который указывает параметр IpBuffer,

    в символах;


  • lpFilePart — адрес ячейки размером с двойное слово, в которое помещается указатель на позицию внутри буфера, идентифицированную параметром 1 pBuf fег и соответствующую первому символу имени файла после имен всех каталогов.


  • Самое интересное в этой функции — механизм ее работы. Суть его в том, что

    реально функция GetFul I PathName не ищет файл, ка имя которого указывает параметр IpBuffer. Результат своей работы — полный путь — она формирует из двух

    компонент: полного пути к текущему каталогу данного процесса и имени файла,

    наличие которого на диске функция GetFul I PathName даже не проверяет. Для подобной работы ей даже не нужно обращаться к диску. С аналогичной функцией

    ' мы уже имели дело, когда рассматривали функции MS DOS для работы с файлами, имеющими длинные имена.


    Содержание раздела