On 30/05/2006 1:55 PM, Roger Upole *top-posted*:

> Shift nFileSizeHigh by 32 and add FileSizeLow.

Uh-ohh. Here we have yet another manifestation of the Y2K bug's little 
sibling, the F2G bug.

The above doesn't work for 2GB <= filesize < 4GB, 6GB <= filesize < 8GB, 
etc. See below.

> 
>      Roger
> 
> "DurumDara" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
>> Hi !
>>
>> I get the file datas with FindFilesW.
>> I want to calc the filesize from nFileSizeLow and nFileSizeHigh with easiest 
>> as possible, without again calling os.getsize().
>> How to I do it ? I need good result !
>>
>> Thanx for help:
>>  dd 
> 

Those two items are defined as int (that's *signed* int) -- so if the 
punter has a 3 GB file, nFileSizeHigh will be zero and nFileSizeLow will 
be -1073741824. *Minus* 1 GB? Hey, d00d, who stole my file-system?

Try this:

fsz = (hi << 32) + lo
if lo < 0:
     fsz += 0x100000000

This problem is described in the first article found by googling for 
"nFileSizeHigh", as I suggested to the OP. Here is some evidence:

C:\junk>dir gb3.txt
[snip]
31/05/2006  07:59 AM     3,221,225,472 gb3.txt
[snip]
C:\junk>python
Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on 
win32
Type "help", "copyright", "credits" or "license" for more information.
|>>> import win32file
|>>> d = win32file.FindFilesW(u'gb3.txt')
|>>> d
[(32, <PyTime:30/05/2006 9:43:06 PM>, <PyTime:30/05/2006 9:59:06 PM>, 
<PyTime:30/05/2006 9:59:06 PM>, 0, -1073741824, 0, 0, u'gb3.txt', u'')]
|>>> hi, lo = d[0][4:6]
|>>> hi, lo
(0, -1073741824)
|>>> fsz = (hi << 32) + lo
|>>> fsz
-1073741824
|>>> # if lo < 0:
|... fsz += (1 << 32)
|>>>
|>>> fsz
3221225472L
|>>>

Cheers,
John

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to