我使用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你能告訴我爲什麼你認爲它是重複的? –