比较文件名和可选文件扩展名

时间:2016-04-27 22:18:45

标签: c string

我需要检查存储在字符串中的路径是否实际上是一个文件的路径,该文件的名称我已存储在另一个字符串中。

例如:假设我在/ etc / prog / myprog

中有一个文件

我有这种功能:

char *slash = strrchr(procname, '/');
if(slash && !strcmp(slash, name)){
    printf("FOUND!\n");
}

它在查找“myprog”时工作正常,但如果文件有扩展名,它显然不起作用(例如,如果字符串以“/vim.basic”结尾)我希望if语句在查找时为true为“vim”)。

我想我必须使用strrchr来找到dot的位置,如果它存在,停止在该char处进行比较,但我不知道如何构造条件语句以这种方式工作。

1 个答案:

答案 0 :(得分:1)

需要strncmp和一些额外的计算和检查。

请注意,此时您的代码已关闭1:

if (slash && !strcmp(slash, name))

.. slash会将指向斜杠,因此除非您在name中考虑到它,否则它将始终失败。

此代码有效:

if (slash &&
    !strncmp(slash+1, name, strlen(name)) &&
    (!slash[1+strlen(name)] || slash[1+strlen(name)] == '.'))
{
    printf("FOUND!\n");
}

它检查slash+1的第一个 n 字符是否等于name 长度 name - 因此,它会检查vim中的etc/vim.basic - 然后检查name后面是0字符串结尾 1}}角色。

如果您可以修改.

,那么眼睛会更容易一些
procname

(如果无法更改if (slash) { char *dot = strchr (slash, '.'); if (dot) *dot = 0; if (!strcmp(slash+1, name)) { printf("FOUND!\n"); } } ,则无效,如procname。如果可以的话,OTOH甚至可以通过添加

来恢复原始字符串
char *procname = ".."

最后。)