Я не могу прочитать из временного файла, созданного QTemporaryFile, может быть, вы можете проверить код, приведенный ниже ...PyQt: QTemporaryFile - не удалось прочитать из файла
>>> from PyQt4 import QtCore
>>> fileTemp = QtCore.QTemporaryFile()
>>> fileTemp.open()
True #file is created
>>> fileTemp.fileName()
PyQt4.QtCore.QString(u'/tmp/qt_temp.TJ2302')
>>> fileTemp.writeData('foobar')
6L #six bytes are written, great
>>> open(fileTemp.fileName(), 'r').read()
'' #but there is still nothing inside!
>>> fileTemp.size()
6L #magically, by doing this 'foobar' appears in this tempFile...
#the same effect gives e.g. fileTemp.readData(1000), but nothing is read
>>> open(fileTemp.fileName(), 'r').read()
'foobar'
>>> fileTemp.readData(1000)
'' #why...
>>> fileTemp.readAll()
PyQt4.QtCore.QByteArray('')
>>> fileTemp.readAll().size()
0 #why...
будут благодарны за любую помощь!
EDIT
я расширил QTemporaryFile вести себя, как и ожидалось, но все еще ищет более чистым раствором ...
class MyTemporaryFile(QtCore.QTemporaryFile):
def __init__(self, *argc, **argv):
QtCore.QTemporaryFile.__init__(self, *argc, **argv)
def write(self, data):
f = open(self.fileName(), 'w')
f.write(data)
f.close()
def read(self):
f = open(self.fileName(), 'r')
data = f.read()
f.close()
return data
Спасибо, поэтому теперь я знаю, как правильно писать временный файл ... но как я могу его прочитать? tempFile.read (1000) возвращает пустую строку, tempFile.readAll() возвращает пустой QByteArray. Конечно, я всегда могу открыть open (fileTemp.fileName(), 'r'), но почему эти два упомянутых не работают? – user2220568
@ user2220568 Вы должны думать, что каждый файл имеет указатель на текущую позицию файла. Когда вы создаете новый временный файл и записываете ''foobar'', указатель будет перемещен в конце данных, записанных в файл. 'read()' считывает данные из текущей позиции вперед, следовательно, пустую строку (потому что после ''foobar'' ваш файл пуст). Если вы хотите установить текущую позицию, вы можете использовать метод 'seek'. В частности, 'tempFile.seek (0)' будет устанавливать текущую позицию в начале файла. – Bakuriu
Спасибо! но все еще чего-то не хватает. после f.flush() и f.seek (0), f.readAll() возвращает пустой QByteArray. Но f.flush() f.seek (1) f.seek (0) выполнил задание ... – user2220568