GetFileDirName

Выделяет из строки пути к файлу имя конкретной папки или файла и расчёта отстояния этого имени от начала строки.

int GetFileDirNameA(
    const char *InBuffer,
    size_t SzInBuffer,
    char *OutBuffer,
    size_t SzOutBuffer,
    int Level
);
int GetFileDirNameW(
    const wchar_t *InBuffer,
    size_t SzInBuffer,
    wchar_t *OutBuffer,
    size_t SzOutBuffer,
    int Level);

Параметры

InBuffer
[вх]
Указатель на входной буфер со строкой пути.
SzInBuffer
[вх] Размер входного буфера.
OutBuffer
[вых] Указатель на выходной буфер для записи выделенного имени. Может быть = 0. В таком случае функция возвращает только метрики.
SzOutBuffer
[вх] Размер выходного буфера.
Level
[вх] Указание на уровень отстояния (вложенности) требуемого имени каталога или файла от начала пути, или спецкоды:
На примере пути к файлу: С:\dirLvl1\dirLvl2\dirLvl3\File(onLvl4).ext
Т.е. тут С: - уровень 0; dirLvl1 - папка на уровне 1 вложенности; и. т. д
если Level >= 0 - функция записывает в OutBuffer имя папки/файла указанного уровня и возвращает расстояние от начала строки до начала имени этой папки/файла в количестве символов.
если Level = -1 - Возвращает число уровней вложенности в строке (для приведённого примера: 4)
если Level = -2 - "Получить имя файла" - находит и возвращает имя файла/папки из конца пути (для примера OutBuffer = {File(onLvl4).ext} и  return = 26)

Возвращаемые значения

>= 0 - если Level != -1 - расстояние от начала строки до начала имени этой папки/файла в количестве символов, иначе (при Level == -1) - число уровней вложенности в строке.
-1 - Указанный в Level уровень недостижим т. к. в переданном пути нет такого уровня вложенности.
-2 - Заданно недопустимое значение для Level (всегда если Level < -2)
-3 - "Обрезка!" - результирующая строка вышла длиннее OutBuffer и была обрезана.
-10 - Входной буфер не задан (InBuffer и/или SzInBuffer = 0)

Заметки


Быстрая справка

ОС Требует наличие стандартной библиотеки Си
DLL 2fapShare.dll
Библиотека 2fapShare.lib
Заголовок filepath.h

Смотри также