簡體   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