[Python-bugs-list] [ python-Bugs-432373 ] [Windows] file.tell() gives wrong value

noreply@sourceforge.net noreply@sourceforge.net
Thu, 18 Oct 2001 14:04:26 -0700


Bugs item #432373, was opened at 2001-06-12 04:09
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=432373&group_id=5470

Category: Python Library
Group: Platform-specific
>Status: Closed
>Resolution: Wont Fix
Priority: 3
Submitted By: Elmar Sonnenschein (eso)
>Assigned to: Tim Peters (tim_one)
Summary: [Windows] file.tell() gives wrong value

Initial Comment:
Invoking tell() on a file object will return a wrong 
(arbitrary?) value if called before seeking. Example: 
The following script

f = open('c:\test.xyz')
print 'pos: ' + `f.tell()`
print 'read: ' + f.read(3)
print 'pos: ' + `f.tell()`
f.seek(0)
print 'pos: ' + `f.tell()`
print 'read: ' + f.read(3)
print 'pos: ' + `f.tell()`
f.close()

will yield the following result:

pos: 0
read: XYZ
pos: 3587  <-- wrong value
pos: 0
read: XYZ
pos: 3

Only the return value of tell is wrong, not the actual 
file position, i. e. a consecutive read() will return 
the correct bytes. It doesn't help to seek before 
reading, only seeking _after_ reading will set the 
return value of tell() correctly.

File size of 'test.xyz' was 3.822.167 Bytes.

----------------------------------------------------------------------

>Comment By: Tim Peters (tim_one)
Date: 2001-10-18 14:04

Message:
Logged In: YES 
user_id=31435

Closing for lack of followup info requested 4 months ago.

Here's a cute file:

>>> f = file('ga', 'wb')
>>> f.write(chr(26) * 10000)
>>> f.write('a')
>>> f.close()

If I feed that into the test program, it displays

pos: 0L
read:
pos: 4096L
pos: 0L
read:
pos: 512L

under 2.2a4.  But this has nothing to do with Python -- 
don't ever open binary files in text mode -- or, if you 
must, complain about the results to Microsoft <wink>.

----------------------------------------------------------------------

Comment By: Tim Peters (tim_one)
Date: 2001-06-13 22:48

Message:
Logged In: YES 
user_id=31435

Changed to Platform-specific (I'm sure this doesn't happen 
under Unix variants).

What happens if you write this little program in C 
instead?  My guess it will do the same thing.  If so, it's 
a Microsoft library problem Python can't hide (Python .tell
() and .seek() simply call the platform C library 
functions).

Reduced the priority until there's evidence this is 
actually a Python (not mscvrt.dll) inelegance.

----------------------------------------------------------------------

Comment By: Elmar Sonnenschein (eso)
Date: 2001-06-12 06:56

Message:
Logged In: YES 
user_id=145214

Just found out that it only happens if it is a binary file 
which is opened without the 'b' mode flag. Therefore it is 
not severe but still strange behavior. 
Platform is Windows 2000.

----------------------------------------------------------------------

Comment By: Hans Nowak (zephyrfalcon)
Date: 2001-06-12 06:52

Message:
Logged In: YES 
user_id=173607

Works fine for me... I'm using Python 2.1 on Windows NT 4, 
sp 5. :-/  Maybe it's platform dependent?


----------------------------------------------------------------------

Comment By: Elmar Sonnenschein (eso)
Date: 2001-06-12 04:15

Message:
Logged In: YES 
user_id=145214

Checked on Python 2.0, 2.1, and ActivePython 2.1 - always 
the same.

----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=432373&group_id=5470