在C程序中,我在字符串中有一个文件路径(具体来说,这是存储在exe
中的argv[0]
名称)。我想提取文件名并使用MS Visual Studio 2005丢弃目录路径。有任何内置函数吗?
答案 0 :(得分:4)
不是,只需找到路径中的最后一个反斜杠。之后的任何东西都是文件名。如果之后没有任何内容,则路径指定目录名称。
// Returns filename portion of the given path
// Returns empty string if path is directory
char *GetFileName(const char *path)
{
char *filename = strrchr(path, '\\');
if (filename == NULL)
filename = path;
else
filename++;
return filename;
}
答案 1 :(得分:3)
供参考,这是我实现的代码,据称是Win / Unix兼容:
char *pfile;
pfile = argv[0] + strlen(argv[0]);
for (; pfile > argv[0]; pfile--)
{
if ((*pfile == '\\') || (*pfile == '/'))
{
pfile++;
break;
}
}
答案 2 :(得分:2)
如果你想要一个来自libc的函数:
#include <unistd.h>
char * basename (const char *fname);
答案 3 :(得分:1)
这是穷人的版本:
char *p, *s = args[0]; // or any source pathname
...
p = strchr(s, '\\'); // find the 1st occurence of '\\' or '/'
// if found repeat the process (if not, s already has the string)
while(p) {
s = ++p; // shift forward s first, right after '\\' or '/'
p = strchr(p, '\\'); // let p do the search again
}
// s now point to filename.ext
...
注意:对于_TCHAR
,请使用 _tcschr
,而不是 strchr
strchr
类似于:while((*p) && (*p != '\\')) p++;
如果找不到chr
,则返回safebelt NULL。
所以,如果你真的不想依赖另一个lib,你可以使用它:
char *p, *s = args[0];
...
p = s; // assign to s to p
while(*p && (*p != '\\')) p++;
while(*p) { // here we have to peek at char value
s = ++p;
while (*p && (*p != '\\')) p++;
}
// s now point to filename.ext
...
如果低于此值,请改用asm
..
答案 4 :(得分:0)