2011/12/19 Scott Leerssen <sleers...@gmail.com>

> >>> I just tried that, and after closing the file object and attempting to
> call win32api.ClosHandle() on the value returned by detach, I get an
> exception of "error: (6, 'CloseHandle', 'The handle is invalid.')"  Here's
> what the code looks like:
> >>>
> >>>    h = win32file.CreateFile(
> >>>        fname,
> >>>        win32file.GENERIC_READ,
> >>>        win32file.FILE_SHARE_READ,
> >>>        None,
> >>>        win32file.OPEN_EXISTING,
> >>>        win32file.FILE_FLAG_BACKUP_SEMANTICS,
> >>>        None
> >>>        )
> >>>    hd = h.Detach()
> >>>    fd = msvcrt.open_osfhandle(hd, os.O_RDONLY)
> >>>    f = os.fdopen(fd, 'rb')
> >>>    f.read()
> >>>    f.close()
> >>>    h.Close()
> >>>    win32file.CloseHandle(hd)
>

- h was Detach()ed, so h.Close() is a no-op.
- you should not win32file.CloseHandle(hd), the handle now owned by the
file object:
f.close() called the C function fclose(), which called close(fd) which
called CloseHandle.

f.close() is enough here!

-- 
Amaury Forgeot d'Arc
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to