#include <stdio.h>
#include <string.h>
#ifndef WIN32
void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext);
static void _split_whole_name(const char *whole_name, char *fname, char *ext);
#endif
/* main test */
int main(void)
{
char *path = "/home/test/dir/f123.txt";
// char *path = "/home/test/dir/123.txt";
// char *path = "/home/test/dir/123";
// char *path = "123";
// char *path = "123.txt";
char drive[128];
char dir[128];
char fname[128];
char ext[128];
_splitpath(path, drive, dir, fname, ext);
printf("path = %s\n", path);
printf("dir = %s\n", dir);
printf("fname = %s\n", fname);
printf("ext = %s\n", ext);
return 0;
}
#ifndef WIN32
void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext)
{
char *p_whole_name;
drive[0] = '\0';
if (NULL == path)
{
dir[0] = '\0';
fname[0] = '\0';
ext[0] = '\0';
return;
}
if ('/' == path[strlen(path)])
{
strcpy(dir, path);
fname[0] = '\0';
ext[0] = '\0';
return;
}
p_whole_name = rindex(path, '/');
if (NULL != p_whole_name)
{
p_whole_name++;
_split_whole_name(p_whole_name, fname, ext);
snprintf(dir, p_whole_name - path, "%s", path);
}
else
{
_split_whole_name(path, fname, ext);
dir[0] = '\0';
}
}
static void _split_whole_name(const char *whole_name, char *fname, char *ext)
{
char *p_ext;
p_ext = rindex(whole_name, '.');
if (NULL != p_ext)
{
strcpy(ext, p_ext);
snprintf(fname, p_ext - whole_name + 1, "%s", whole_name);
}
else
{
ext[0] = '\0';
strcpy(fname, whole_name);
}
}
#endif
原文来自:[CSDN-a_ran]
声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请与本网联系,我们将及时更正、删除,谢谢。 邮箱地址:homedata_ltd@163.com
评论区