我有一个功能:
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.
他们打印一个地址。
答案 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系统。
图书馆设计人员通过不包括这些功能来避免这些系统相关的问题。