C++ 构造QFileInfo对象是否会导致文件系统访问?
运行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 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的文档直接指出它不访问文件系统,否则我的答案不会永远正确