【发布时间】:2014-01-10 07:59:13
【问题描述】:
我正在使用 PyQt,但在使用 Windows 测试我的应用程序时发现了奇怪的行为(在 Linux 上一切正常)。
我有一个可以读写的文件,我想通过应用对其进行测试:
>>> from PyQt4.QtCore import QFile, QFileInfo
>>> f1 = QFileInfo("C:\Users\Maxime\Desktop\script.py")
>>> f2 = QFile("C:\Users\Maxime\Desktop\script.py")
>>> f1.isWritable()
True
>>> f2.isWritable()
False
所以看起来QFile 在那个测试用例上是错误的。但是,在另一个只读文件上:
>>> f1 = QFileInfo("C:\Program Files (x86)\MySoftware\stuff\script.py")
>>> f2 = QFile("C:\Program Files (x86)\MySoftware\stuff\script.py")
>>> f1.isWritable()
True
>>> f2.isWritable()
False
现在,这是QFileInfo,这是错误的!
所以我决定也许我应该改用os.access:
>>> import os
>>> os.access("C:\Users\Maxime\Desktop\script.py")
True
>>> os.access("C:\Program Files (x86)\MySoftware\stuff\script.py")
True
所以os.access 在一种情况下也是错误的,并返回与QFileInfo 相同的结果。
我有多个问题:
- 我对 Windows 不熟悉,有什么遗漏的吗?
- 使用Qt,我可以使用
QFileInfo和QFile来测试是否可以写入文件。我应该使用其中一种而不是另一种吗? - 如果这只是 Qt(和 Python??)中的一个错误,我想要一个也可以在 Linux 和 Mac OS 上运行的解决方法。
编辑:
来自 Frank 的一个非常有趣的评论解释说 QFile::isWritable() 将始终返回 False,因为我还没有打开文件。
>>> f = QFile("C:\Users\Maxime\Desktop\script.py")
>>> f.open(QFile.WriteOnly)
True
>>> f.isWritable()
True
>>> f = QFile("C:\Program Files (x86)\MySoftware\stuff\script.py")
>>> f.open(QFile.WriteOnly)
False
>>> f.isWritable()
False
【问题讨论】:
-
@ismail 你能告诉我为什么你认为它是重复的吗?
-
我认为 QFile::isWritable,实际上是 QIODevice::isWritable,在您的设置中总是会返回 false。 QIODevice::isWritable) 返回文件是否 /opened/ 用于写入,但由于你没有 open() 任何东西,它总是返回 false qt-project.org/doc/qt-5.0/qtcore/qiodevice.html#isWritable
-
@FrankOsterfeld 谢谢,这是一个非常有趣的评论。我已经更新了我的问题。你认为这是测试我是否可以写文件的好方法吗?
标签: python qt pyqt file-permissions