首页 > 代码库 > windows 上的 _splitpath 函数在 linux 平台下的简单实现
windows 上的 _splitpath 函数在 linux 平台下的简单实现
在做移植时, 发现了 _splitpath 在 linux 下是没有的,于是决定自己写下,也不难。
首先百科到如下内容:
声明定义
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );
说明
分解路径,把你的完整路径给分割开来,就是一个对字符串进行分割的函数
参数表
path, Full path(完整路径)
drive , Optional drive letter, followed by a colon (:)(磁盘驱动包含:)
dir, Optional directory path, including trailing slash. Forward slashes (/ ), backslashes (\ ), or both may be used.(文件路径,无论是以“/”,“\”)
fname, Base filename (no extension)(文件名)
ext , Optional filename extension, including leading period (.)(后缀名)
---------------------------------------- 分割线出没,请小心 --------------------------------------------Linux 下实现及测试代码如下:
#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运行结果如下:
windows 上的 _splitpath 函数在 linux 平台下的简单实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。