C++ 有什么方法可以识别文件流吗?它是什么并不重要,只要从同一个文件创建的两个流具有相同的“id”即可;任何可以让我说从同一个文件创建的两个流是等价(不是相等)的东西。
最佳答案
唯一不特定于操作系统的通用标识符是文件路径或设备名称本身,但 iostream 对象不提供对该信息的访问。
一种解决方案是对流对象进行子类化并提供您需要的功能。一个不令人满意的例子:
class id_fstream : public std::fstream
{
public :
id_fstream( const char * filename,
ios_base::openmode mode = ios_base::in | ios_base::out ) :
fstream( filename, mode ), m_filename( filename)
{
// do nothing
} ;
const std::string& filename()
{
return m_filename ;
}
private :
std::string m_filename ;
} ;
然后你可以编写如下代码:
if( id_fstreamA.filename() == id_fstreamB.filename() )
{
...
}
但是,如果一个文件是用不同的相对路径或绝对路径或通过别名打开的,则它不起作用。您可以通过特定于操作系统的调用获取当前工作目录,然后将完整路径解析为所用的任何非绝对路径,从而解决该问题。
关于c++ - 有什么方法可以识别流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862859/