• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;


  • Иллюстрированный самоучитель по задачам и примерам Assembler

    Работа с дисками, каталогами и организация поиска файлов

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

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

    RD GetCurrentDirectory(OWORD nBufferLength, LPTSTR ipBuffer);
    

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

    SetCurrentDirectory (LPCTSTR IpszPathName):
    

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

    Платформа Win32 также поддерживает понятие системного и основного каталога Windows. Для определения системного каталога существует специальная функция GetSystemDirectory.

    GetSystemDirectory(LPTSTR ipszBuffer, UINT uSize):
    

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

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

    UINT GetWindowsDirectorydPTSTR IpBuffer. UINT uSize);
    

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

    Для демонстрации применения вышеприведенных функций рассмотрим комплексный пример, в ходе которого продемонстрируем порядок вызова и анализа Е возвращаемых значений функциями API Win32 для работы с каталогами. Определим текущий каталог процесса, создадим новый каталог, сделаем его текущим удалим новый каталог, определим системный каталог и каталог Windows.

    :prg07_35.asm – Win32 приложение для исследования работы функций
    ;работы с каталогами API Win32.
    .data
    TitleText db 'Работа с каталогами в Win32',0
    NewOir db "Новый каталог".0
    dirjbuf db 50 dup ("?")
    size_dir_buf=$-dir_buf
    Parent db "..".0
    .code
    :определив текущий каталог
    push offset dirjwf
    push size_dir_buf
    call GetCurrentDirectoryA
    cmp eax.0
    jz exit;выход в случае неудачи:создадим каталог
    push 0
    push offset NewDir.
    call CreateDirectoryA
    cmp eax,0
    jz exit:выход в случае неудачи сделаем новый каталог текущий
    push offset NewDir
    call SetCurrentDirectoryA
    cmp eax.0
    jz exit;выход в случае неудачи
    ;проверим новый текущий каталог
    push offset dir_buf
    push size_dir_buf
    call GetCurrentDirectoryA
    cmp eax.0
    jz exit.-выход в случае неудачи
    ;------…..SetCurrentDi rectory-………………-………
    :вернемся в родительский каталог
    push offset Parent
    call SetCurrentDirectoryA
    cmp eax.0
    jz exit;выход в случае неудачи
    ;проверил новый текущий каталог
    push offset dir_buf
    push size_dir_buf
    call GetCurrentDirectoryA
    cmp eax.O
    jz exit:выход в случае неудачи:удалим новый текущий каталог
    push offset NewDir
    call RemoveDirectoryA
    cmp eax.O
    jz exit;выход в случае неудачи определив системный каталог mov eax.size_dir_buf push eax
    push offset dir_buf call GetSystemDirectoryA cmp eax.O
    jz exit:выход в случае неудачи: определим основной каталог Windows mov eax.size_d1r_buf push eax
    push offset dir_buf call GetWindowsDirectoryA cmp eax.O
    jz exit – . выход в случае неудачи результат смотрим в отладчике TD32.exe
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.