有没有办法找到使用C程序的文件的父目录。我想为该目录的文件提供相同的权限。为此,我想知道该文件的父目录。任何帮助表示赞赏。
答案 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 page,Goz's answer和thkala'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