Kaydet (Commit) cfc4178e authored tarafından Tim Peters's avatar Tim Peters

When the classes in wave.py opened files themselves, their .close() methods

didn't bother to close the files.  This caused the new test_wave test to fail
under Windows, as Windows won't let you delete a file that's open.  Fixed
that by ensuring the wave read & write classes' .close() and __del__ methods
close files that were opened by their constructors.
üst e8d2f558
......@@ -152,11 +152,15 @@ class Wave_read:
raise Error, 'fmt chunk and/or data chunk missing'
def __init__(self, f):
self._i_opened_the_file = None
if type(f) == type(''):
f = __builtin__.open(f, 'rb')
self._i_opened_the_file = f
# else, assume it is an open file object already
self.initfp(f)
def __del__(self):
self.close()
#
# User visible methods.
#
......@@ -168,6 +172,9 @@ class Wave_read:
self._soundpos = 0
def close(self):
if self._i_opened_the_file:
self._i_opened_the_file.close()
self._i_opened_the_file = None
self._file = None
def tell(self):
......@@ -284,8 +291,10 @@ class Wave_write:
"""
def __init__(self, f):
self._i_opened_the_file = None
if type(f) == type(''):
f = __builtin__.open(f, 'wb')
self._i_opened_the_file = f
self.initfp(f)
def initfp(self, file):
......@@ -300,8 +309,7 @@ class Wave_write:
self._datalength = 0
def __del__(self):
if self._file:
self.close()
self.close()
#
# User visible methods.
......@@ -413,11 +421,15 @@ class Wave_write:
self._patchheader()
def close(self):
self._ensure_header_written(0)
if self._datalength != self._datawritten:
self._patchheader()
self._file.flush()
self._file = None
if self._file:
self._ensure_header_written(0)
if self._datalength != self._datawritten:
self._patchheader()
self._file.flush()
self._file = None
if self._i_opened_the_file:
self._i_opened_the_file.close()
self._i_opened_the_file = None
#
# Internal methods.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment