繁体   English   中英

从文件路径反向获取目录路径

[英]To get directory path in reverse from file path

假设我有一个文件名/A/B/C/d.txt,

我想反向打印目录路径,

/A/B/C/
/A/B/
/A/

下面是一个使用递归反向打印目录路径的程序。

#include <stdio.h>
#include <libgen.h>
#include <string.h>
#include <stdlib.h>

void parsepath(const char *dirpath)
{
    char* dirPathTemp;  
    char* dirname;
    char path[255];  

    dirPathTemp = strdup(dirpath);
    dirname = dirname(dirPathTemp);     
    strcpy(path, dirname);

    free(dirPathTemp);  

    printf("path = %s\n", path);    

    if (0 != strcmp(path, "/"))
        parsepath(path);
}

int main(int argc, char *argv[])
{
    parsepath("/A/B/C/d.txt");

    return 0;
}

还有其他没有递归的方法吗? 谢谢。

以下算法很简单:每次在输入字符串中搜索最后一次出现的'/' ,将其替换为'\\0' (字符串结尾标记)并打印出来,直到路径中不再有斜杠为止。 复制输入字符串是必要的,因为必须就地对其进行修改:

#include <stdio.h>
#include <string.h>

void parsepath(const char *dirpath)
{
    char *p = strdup(dirpath);
    char *lastslash;
    while(lastslash = strrchr(p, '/')) {
        *lastslash = '\0';
        printf("%s\n", p);
    }
    free(p);
}

int main(void) {
    parsepath("/A/B/C/d.txt");
    return 0;
}

注意: strrchr()从头开始搜索输入字符串,这不是最佳选择。 由于希望每次最后一次出现斜杠,所以向后搜索将是更可取的。 这就是memrchr()函数的作用。 更换strrchr()memrchr()就留给读者自己练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM