Как получить имя файла без пути?
Есть некоторое полное имя файла -- myfilename типа char* , в котором присутствуют путь, собственно имя и расширение файла. Как мне с помощью WinAPI получить из myfilename имя файла с расширением, но без пути?
Ищи последний "\". После него будет имя файла
char *chfilename = NULL;
char *ch = strchr(chfullname, '\\\');
while(ch!=NULL)
{
chfilename = ch + 1;
ch = strchr(chfilename, '\\\');
}
врятли есть в WinAPI такая ф-ия.
char *chfilename = NULL;
char *ch = strchr(chfullname, '\\\');
while(ch!=NULL)
{
chfilename = ch + 1;
ch = strchr(chfilename, '\\\');
}
Может в ВинАпи и нет зато в С Runtime Liabrary есть такая функция и называется она _splitpath.
Просто подключи <stdlib.h> и используй эту функцию.
Может в ВинАпи и нет зато в С Runtime Liabrary есть такая функция и называется она _splitpath.
Просто подключи <stdlib.h> и используй эту функцию.
В WinAPI точно нет такой ф-ии.
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
...
_splitpath( path_buffer, drive, dir, fname, ext );
...
char *chfilename = chfullname + strlen(chfullname) - 1;
while(*chfilename!='\\\')chfilename--;
chfilename++;
В WinAPI точно нет такой ф-ии.
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
...
_splitpath( path_buffer, drive, dir, fname, ext );
...
char *chfilename = chfullname + strlen(chfullname) - 1;
while(*chfilename!='\\\')chfilename--;
chfilename++;
Упрощаем задачу до минимума :)
char *path=strrchr(chfullname,'\\\');
if (path) *path=0;
Фактически оттяпыватся все что находится за последним слэшом - тобишь имя файла. А путь остается. Если конечно нужен закрывающий слэш - тогда так:
Ну или чтобы совсем просто:
char *chfullname;
if ((path=strrchr(chfullname,'\\\'))!=NULL) *(++path)=0;
Упрощаем задачу до минимума :)
if (path) *path=0;
...
Ну или чтобы совсем просто:
char *chfullname;
if ((path=strrchr(chfullname,'\\\'))!=NULL) *(++path)=0;
Ничего личного, и прошу без обиды, но мне кажется, что тебя сегодня утром из кровати вытянули, но разбудить забыли.
Ничего личного, и прошу без обиды, но мне кажется, что тебя сегодня утром из кровати вытянули, но разбудить забыли.
А на что мне обижаться? Я конечно извиняюсь, может я не совсем понял суть вопроса, но просто привел максимально короткий код для выделения из имени файла пути. Или я не прав?
P.S. Жутко извиняюсь - забыл сказать что результирующий путь без имени файла по-прежнему будет в chfullname, path - это временная переменная - на нее внимания обращать не надо. Надо было конечно ее по-другому обозвать - лажанулся. Извиняюсь.
А на что мне обижаться? Я конечно извиняюсь, может я не совсем понял суть вопроса, но просто привел максимально короткий код для выделения из имени файла пути. Или я не прав?
Нужен указатель на имя файла. Этим мог бы быть path, если просто path++. Но на счет *(++path)=0; вспоминаются слова пассажира Титаника, который находясь в воде и увидев айсберг, сказал: это правда, что я к шампанскому заказывал льда, но это уже явный перебор. Шутка :)
Нужен указатель на имя файла. Этим мог бы быть path, если просто path++. Но на счет *(++path)=0; вспоминаются слова пассажира Титаника, который находясь в воде и увидев айсберг, сказал: это правда, что я к шампанскому заказывал льда, но это уже явный перебор. Шутка :)
Значит я неверно понял. Тогда прошу прощения. Если нужно имя файла а не путь к нему, тогда действительно надо делать path++.
*(++path)=0; - это для выделения пути. Сглючил :)
Значит я неверно понял. Тогда прошу прощения. Если нужно имя файла а не путь к нему, тогда действительно надо делать path++.
*(++path)=0; - это для выделения пути. Сглючил :)
А почему никто не хочет использовать MFC?
Ведь самое простое по моему это так...
CString fName = sPath.GetBuffer() + sPath.ReverseFind(_T('\\\')) + 1;
А почему никто не хочет использовать MFC?
Ведь самое простое по моему это так...
CString fName = sPath.GetBuffer() + sPath.ReverseFind(_T('\\\')) + 1;
А как же
PathFindFileName + PathFindExtension ?
А как же
PathFindFileName + PathFindExtension ?
А говорили нет API-шных функций... :)
А говорили нет API-шных функций... :)
Я имел в виду Win32 API.:{
Может не сработать, если файл лежит в корне диска. Типа:
G:файл_в_корне_флешки.txt
_splitpath() в этом отношении надежнее.