similar question:
what's correct way use win32file.readfile output pipe?
the issue have not answered in question. when call
result, data = win32file.readfile(my_file, 4096, none)
result 0 according documentation means success:
the result tuple of (hr, string/pyoverlappedreadbuffer), hr may 0, error_more_data or error_io_pending.
even if set buffer 10 , file bigger result 0 , data string containing first 10 characters.
result, buf = win32file.readfile(self._handle, 10, none) while result == winerror.error_more_data: result, data = win32file.readfile(self._handle, 2048, none) buf += data print "hi" return result, buf
"hi" never printed if file contains more data. problem have how can ensure i'm reading whole file without using ridiculous large buffer?
as observed if win32file.readfile
result value hr
0, means success. opposite win32 api documentation says 0 means error occurred.
to determine how many bytes read need check length of returned string. if same size buffer size, there might more data. if smaller, whole file has been read:
def readlines(self): bufsize = 4096 win32file.setfilepointer(self._handle, 0, win32file.file_begin) result, data = win32file.readfile(self._handle, bufsize, none) buf = data while len(data) == bufsize: result, data = win32file.readfile(self._handle, bufsize, none) buf += data return buf.split('\r\n')
you need add error handling this, eg. check result if 0 , if not take according measures.