Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造QFileInfo对象是否会导致文件系统访问?_C++_Qt - Fatal编程技术网

C++ 构造QFileInfo对象是否会导致文件系统访问?

C++ 构造QFileInfo对象是否会导致文件系统访问?,c++,qt,C++,Qt,运行QFileInfo文档中的此示例代码时: QFileInfo fi("/tmp/archive.tar.gz"); QString base = fi.baseName(); // base = "archive" 它会导致访问文件系统吗 我假设调用fi.lastModified()或fi.exists()将需要访问文件系统,但又如何呢?我只使用它提取部分文件名(扩展名、基本文件名、仅目录等)?如果不看方法的实现,就很难准确地说出哪种方法访问文件系统,哪种方法不访问文件系统。但我在图

运行QFileInfo文档中的此示例代码时:

 QFileInfo fi("/tmp/archive.tar.gz");
 QString base = fi.baseName();  // base = "archive"
它会导致访问文件系统吗


我假设调用
fi.lastModified()
fi.exists()
将需要访问文件系统,但又如何呢?我只使用它提取部分文件名(扩展名、基本文件名、仅目录等)?

如果不看方法的实现,就很难准确地说出哪种方法访问文件系统,哪种方法不访问文件系统。但我在图书馆里找到了这样的解释,回答了你的问题:

性能问题 一些
QFileInfo
函数查询文件 系统,但出于性能原因,某些功能仅在 文件名本身。例如:返回 相对文件名,
absolutePath()
必须查询文件系统。这个
path()
函数可以直接处理文件名,等等 它更快

注意:为了提高性能,
QFileInfo
缓存 有关该文件的信息。因为其他人可以更改文件 用户或程序,甚至同一程序的其他部分 是一个刷新文件信息的函数:
refresh()
。如果你 要关闭
QFileInfo
的缓存并强制其访问 每次从文件系统请求信息时,调用
setCaching(false)


我也有同样的问题,所以我研究了Qt源代码。确切地说是462版。另外,我的重点是采用
QString
QFileInfo
构造函数(如原始问题代码所示)

此构造函数调用
QAbstractFileEngine::create
,该构造函数本身会进行两个明显的调用:

  • QDir::searchpath()
  • 新QFSFileEngine()
  • 鉴于我对这两个操作的理解,我非常确信此构造函数不会访问文件系统,而是准备
    QFileInfo
    以使用本机环境中提供的文件名执行此类操作(文件路径约定,如Unix与MS-DOS)

    需要考虑的是,这个语句/代码随时可能发生变化。所以,除非Qt的文档直接指出它不访问文件系统,否则我的答案不会永远正确