C ++:从istream中检索文件名

时间:2014-05-04 03:06:34

标签: c++ string ifstream istream

我有一个功能:

void read_file(istream &file);

在main()中,我会传递类似的内容:

ifstream file;
file.open(argv[1]);
read_file(file);

现在,在read_file函数中,有没有办法获取传入文件的名称? 例如,如果argv [1]是" data1.txt",我们可以从read_file中提取该字符串吗?

提前致谢。

顺便说一下,我试过了:

cout << file << endl; // Doesn't work.
cout << &file << endl; // Same result.

他们打印一个地址。

3 个答案:

答案 0 :(得分:4)

文件流不提供任何检索文件名的方法(或者就此而言的开放模式)。您可以使用pword()xalloc()将其存储在流的缓存中。您还需要注册必要的回调以解决生命依赖性。

答案 1 :(得分:0)

您可以将文件名存储在main()中的类级变量中,以便它可以在read_file函数中输出:

const char* inFile = "";       // input file

int main(int argc, char* argv[])
{
    // assign value from args to
    // class level variable 'inFile'
    inFile = argv[1];       
}

然后你可以在read_file函数中输出'inFile':

cout << inFile << endl;

答案 2 :(得分:0)

您要求的东西通常在操作系统级别完成。这往往不是可移植的,也不会成为标准库。

例如,假设您使用

打开了文件
 "~/../something.txt"

库应该作为文件名返回什么?

如果您打开了符号链接怎么办?

如果操作系统允许多个文件名通过同一文件的目录怎么办?

操作系统可以填写的数量取决于系统本身。例如,如果您曾经使用过VMS系统,那么它的系统服务会充分利用Unix和Dos系统。

图书馆设计人员通过不包括这些功能来避免这些系统相关的问题。