linux 路径分割
linux 路径分割(1) 获得当前工作目录的绝对路径获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”,这样就好记忆了。函数说明: 函数原型:char* getcwd(char* buffer, int len); 参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len
·
linux 路径分割
(1) 获得当前工作目录的绝对路径
获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”,这样就好记忆了。函数说明:
函数原型:char* getcwd(char* buffer, int len);
参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len是buffer的长度。
返回值:获取成功则返回当前工作目录(绝对路径),失败则返回false(即NULL)。
该函数所属头文件为<direct.h>
具体使用如下例:(特别注意的是,当你使用的是Linux系统时,请注意你是否具有相关的权限,如果权限不够会导致获取失败)
#include <stdio.h>
#include <direct.h>
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 <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
更多推荐
已为社区贡献1条内容
所有评论(0)