linux如何将路径分割,linux 路径分割

linux 路径分割

(1) 获得当前工作目录的绝对路径

获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”,这样就好记忆了。

函数说明:

函数原型:char* getcwd(char* buffer, int len);

参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len是buffer的长度。

返回值:获取成功则返回当前工作目录(绝对路径),失败则返回false(即NULL)。

该函数所属头文件为

具体使用如下例:(特别注意的是,当你使用的是Linux系统时,请注意你是否具有相关的权限,如果权限不够会导致获取失败)

#include

#include

int main()

{

char *buffer;

//也可以将buffer作为输出参数

if((buffer = getcwd(NULL, 0)) == NULL)

{

perror("getcwd error");

}

else

{

printf("%s\n", buffer);

free(buffer);

}

}

(2)linux下,分解路径

http://www.tuicool.com/articles/INjYrqv

在做移植时, 发现了 _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

#include

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值