Linux _splitpath 实现路径分割

#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

# linux  C++ 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×