import StringIO
import os

class QOpen(StringIO.StringIO):
    def __init__(self, *args):
        self.__args = args
        StringIO.StringIO.__init__(self)

    def close(self):
        import StringIO, os
        fname = self.__args[0]
        if not os.access(fname, os.R_OK) or self.getvalue() != open(fname).read():
            open(*self.__args).write(self.getvalue())
        StringIO.StringIO.close(self)

    def __del__(self):
        if not self.closed:
            self.close()