是否可以在C中检索文件名?如果文件创建如下:如何从FILE *结构中获取文件名C
FILE *f = fopen ("foo.txt", "r");
而“foo.txt”来自超出范围的变量。有没有办法从FILE结构中检索它?
是否可以在C中检索文件名?如果文件创建如下:如何从FILE *结构中获取文件名C
FILE *f = fopen ("foo.txt", "r");
而“foo.txt”来自超出范围的变量。有没有办法从FILE结构中检索它?
您不能实际上是从您的FILE
对象中检索文件名。但是,如果传递给fopen
的名称对您很重要,并且该变量出于任何原因超出了范围,则可以始终将一个FILE*
包装在一个结构中,也就是说,将一个FILE*
包装在一个结构中。
struct file_with_name {
FILE *f;
char *name; /* OR char name[MAX] */
}
至少这就是我要做的,但这取决于你实际上想要做什么。
无法从FILE
句柄中获取文件名。如果您以后需要使用它,则应该自行存储文件名。可从东西没有与之关联的名称(特别是,从fdopen()
原始文件描述符)创建
由于FILE
对象,他们并不总是有一个名字来获得。
不幸的是,在许多系统中,文件名只是指向inode的指针。如果这些文件系统支持硬链接,那意味着每个真实文件有多个文件名。此外,你可以打开一个文件,然后删除文件,在这种情况下甚至不会有文件名,只是一个描述符。由于这些原因,您无法从文件描述符转到文件名。
一般来说,这是不可能的。你可以试试最近,在Linux上,方法是:
char buf[PATH_MAX];
snprintf(buf, sizeof buf, "/proc/self/fd/%d", fileno(f));
readlink(buf, buf, sizeof buf);
重用buf
一样,是可怕的丑,但据我所知,这是每POSIX的法律,而不是不确定的行为。
这就是我最终会做的。谢谢! – rahmu