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 | Имя макроса |
---|---|---|---|
path | 80 | 260 | MAXPATH |
drive | 3 | 3 | MAXDRIVE |
dir | 66 | 256 | MAXDIR |
fname | 9 | 256 | MAXFILE |
ext | 5 | 256 | MAXEXT |
Функция fnsplit() помещает двоеточие после указания диска в строке, на которую указывает параметр drive. Функция ставит точку перед расширением, определяемым с помощью параметра ext. Обратные слэши в начале и в конце сохраняются.
Две функции fnmerge() и fnsplit() являются взаимно дополняющими друг друга — результаты работы одной из них могут использоваться в качестве входных параметров другой.
Функция fnsplit() возвращает целое число, в котором кодируется пять флагов. В качестве флагов используются следующие макросы, заданные в файле dir.h:
Имя макроса | Значение в случае установки флага |
---|---|
EXTENTION | Расширение имеется |
FILENAME | Имя файла имеется |
DIRECTORY | Путь к каталогу имеется |
DRIVE | Указание диска имеется |
WILDCARDS | Имеется один или более символов, являющихся шаблонами поисков |
Для того, чтобы определить, выставлен ли определенный флаг, необходимо взять этот флаг и возвращаемую величину, провести над ними операцию побитового И и проанализировать результат. Если результат равен 1, то флаг установлен, в противном случае флаг сброшен.