我使用的是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
所以看起来{
现在,这是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
相同。在
我有多个问题:
QFileInfo
和QFile
来测试文件是否可以写入。我应该用一个代替另一个吗?在编辑:
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
为了检查可写性,使用哪一个并不重要。在
QFileInfo的主要区别在于,出于性能原因,它缓存了目标文件的一些信息。但是,您可以使用refresh方法重新读取信息,或者使用setCaching完全关闭缓存。在
此外,正如问题评论中所指出的,QFile.isWritable如果文件尚未打开,将返回False。这不是虫子。文档清楚地表明,isWritable检查文件的OpenMode。这将是零(QIODevice.NotOpen公司)在打开文件之前,否则默认为QIODevice.ReadWrite如果未指定。在
另一个需要注意的问题是QFileInfo.isWritable特定于当前用户。使用QFileInfo.permission获取有关其他用户类的所有权信息(但请注意warning regarding platform differences)。这类似于使用}之间的区别。在
os.access
和{最后,下面是一个测试可写性的简单脚本:
对我来说,在Linux和WinXp上,我得到的结果如下:
^{pr2}$相关问题 更多 >
编程相关推荐