文件的父目录

时间:2011-03-22 14:21:50

标签: c

有没有办法找到使用C程序的文件的父目录。我想为该目录的文件提供相同的权限。为此,我想知道该文件的父目录。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:3)

如果您有文件的路径,可以通过将其作为绝对路径手动执行(如果它是相对的)(不是以Unix上的/开头,或letter:\或Windows上为\letter://,然后将其拆分为文件分隔符(/\),但我知道没有内置 - 能够为你完成所有这一切的功能。

basename and dirname函数可能会有所帮助,但您需要自己弄清楚文件的足够路径,因为它们只能使用字符串;他们不会询问文件系统。

答案 1 :(得分:3)

不能保证做 The Right Thing ,但您是否尝试过以下任何一项:

  • 如果您的文件名包含路径分隔符(例如,在Unix上为/,在Windows上为\),请使用例如strdup()并使用零/空字符替换路径分隔符的最后一次出现(使用例如strrchr()找到)。生成的字符串将是您文件的父目录。

  • 如果没有路径分隔符,则该文件位于当前工作目录中。您是否尝试过使用....链接适用于Unix和Windows。

上面有很多极端情况(例如文件/hello.txt的内容?),但它应该是一个开始。

答案 2 :(得分:2)

标准C中没有这样的功能。您可以在Windows上尝试运气: GetFullPathName http://msdn.microsoft.com/en-us/library/aa364963%28v=vs.85%29.aspx

然后可能_splitpath http://msdn.microsoft.com/en-us/library/e737s6tf%28v=vs.80%29.aspx

但是正如所写的那样,做这类事情没有标准功能。

答案 3 :(得分:0)

我使用cplusplus web pageGoz's answerthkala's answer中的代码编写了C语言片段。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
.
.
.
    out_file_name = "c:/Users/Documents/output/test.txt";
    const char ch = '/'; 
    char* rest;
    int loc; 
    char letter;
    char* pointer_to_loc; 

    // Current directory
    rest = strrchr(out_file_name, ch);
    // Just make sure there is a directory
    if (rest != NULL) {
        pointer_to_loc = strrchr(out_file_name, ch);  # Pointer to last / symbol
        loc = rest - out_file_name + 1;
        char subbuff[loc]; # string for truncated string
        loc--;
        memcpy( subbuff, &out_file_name[0], loc ); # copy section of string
        subbuff[loc] = '\0';

        // Parent directory, now input is current directory from previous section
        rest = strrchr(subbuff, ch);
        if (rest != NULL) {
            loc = rest - subbuff + 1;
            char subsubbuff[loc];
            loc--;
            memcpy( subsubbuff, &subbuff[0], loc );
            subsubbuff[loc] = '\0';

            printf (subsubbuff); // Parent directory
            printf ("\n");
        }
        printf (subbuff); // Current directory
        printf ("\n");
    }
    printf (output_file_name); // Entire path to file