Программирование на C и C++

Онлайн справочник программиста на C и C++

fnmerge, fnsplit

void fnmerge(char *path, const char *drive, const char *dir, const char *fname, const char *ext)

int fnsplit(const char *path, char *drive, char *dir, char *fname, char *ext)

Прототип: 
Описание: 

Эти функции не определены стандартом ANSI С.

Функция fnmerge() конструирует имя файла с помощью заданных индивидуальных компонен­тов и помещает это имя в строку, на которую указывает параметр path. Например, если drive определен как С:, dir определен как \ВСС\, параметр fname равен TEST, а параметр ext равен .С, то имя файла будет следующим: C:\BCC\TEST.C.

Функция fnsplit() осуществляет декомпозицию на компоненты имени файла, на который указы­вает параметр path. Ниже приведены размеры массивов, которые требуются для каждого из пара­метров. Причем макросы, содержащиеся в файле dir.h, могут быть использованы вместо чисел:

ПараметрРазмер для DOSРазмер для WindowsИмя макроса
path80260MAXPATH
drive33MAXDRIVE
dir66256MAXDIR
fname9256MAXFILE
ext5256MAXEXT

Функция fnsplit() помещает двоеточие после указания диска в строке, на которую указывает параметр drive. Функция ставит точку перед расширением, определяемым с помощью параметра ext. Обратные слэши в начале и в конце сохраняются.

Две функции fnmerge() и fnsplit() являются взаимно дополняющими друг друга — результаты работы одной из них могут использоваться в качестве входных параметров другой.

Функция fnsplit() возвращает целое число, в котором кодируется пять флагов. В качестве фла­гов используются следующие макросы, заданные в файле dir.h:

Имя макросаЗначение в случае установки флага
EXTENTIONРасширение имеется
FILENAMEИмя файла имеется
DIRECTORYПуть к каталогу имеется
DRIVEУказание диска имеется
WILDCARDSИмеется один или более символов, являющихся шаблонами поисков

Для того, чтобы определить, выставлен ли определенный флаг, необходимо взять этот флаг и возвращаемую величину, провести над ними операцию побитового И и проанализировать ре­зультат. Если результат равен 1, то флаг установлен, в противном случае флаг сброшен.

Пример: