1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
| #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
|