我使用PyQt,并且在用Windows测试我的应用程序时发现了奇怪的行为(所有事情都按照预期与Linux一起工作)。QFileInfo与QFile来测试一个文件是否可写
我有我可以读取和写入文件,我想从应用程序进行测试:
>>> 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上工作的解决方法。
编辑:弗兰克
一个非常有趣的评论解释说,因为我还没有打开该文件一个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
可能重复Linux与Python](http://stackoverflow.com/questions/1861836/checking-file-permissions-in-linux-with-python) – ismail
请参阅https://bugreports.qt-project.org/browse/QTBUG-30148 –
@ismail你能告诉我为什么你认为它是重复的? –