Seite 1 von 1

zipfile/Datei schreiben unter Windows: Permission denied

Verfasst: Montag 15. Oktober 2007, 10:30
von Jan-Peer
Hallo,

ich möchte eine .odt-Datei in ein eigens angelegtes temporäres Verzeichnis entpacken. Der Code dafür sieht wie folgt aus und funktioniert unter Linux einwandfrei:

Code: Alles auswählen

def _extract_document(self, sourcepath, targetpath):
        """
        Entpackt die Vorlage in das Zielverzeichnis
        """
        doc = zipfile.ZipFile(sourcepath, 'r')
                
        # Verzeichnisstruktur erstellen
        for n in doc.namelist():
            dir = os.path.join(targetpath,os.path.dirname(n))
            
            if not os.path.exists(dir):
                os.makedirs(dir)
                
        # Dateien entpacken
        for n in doc.namelist():
            if not n.endswith(os.sep):
                f = open(os.path.normpath(os.path.join(targetpath, n)), "wb")
                f.write(doc.read(n))
                f.flush()
                f.close()
                
        doc.close()
Unter Windows erhalte ich aber die folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Dokumente und Einstellungen\Eufrus\Desktop\Lasso\gui\TicketReminderGUI.py", line 163, in _create_letters
  File "C:\Home\Lasso\program\OdtMerger.py", line 114, in create_documents
    self._extract_document(vpf, tempdir)
  File "C:\Home\Lasso\program\OdtMerger.py", line 54, in _extract_document
    f = open(os.path.normpath(os.path.join(targetpath, n)), "wb")
IOError: [Errno 13] Permission denied: 'temp1\\Configurations2\\statusbar'
Bei meinen Nachforschungen bin ich Windowsseitig auf eine Merkwürdigkeit gestoßen: Alle Verzeichnisse und Dateien sind auf einmal angeblich schreibgeschützt, verhalten sich aber überhaupt nicht entsprechend. Wenn ich versuche, den Haken wegzumachen und die Eigenschaften noch einmal öffne, ist er wieder da.

Aber wie gesagt: Ich kann die Verzeichnisse nach belieben bearbeiten. Und auch die Verzeichnisstruktur aus dem zipfile wird vom Programm noch ordnungsgemäß angelegt.

Was ich bislang probiert habe ist, die Pfade zu normalisieren und ihnen per os.chmod bzw. win32file.SetFileAttributes die Schreibberechtigung zu geben.

Was könnte ich noch versuchen?

Verfasst: Montag 15. Oktober 2007, 12:39
von Costi
ich kann mich erinnern, dass windows oefters zu mir "Permission denied" gesagt hat. Obwohl das nicht die direkte fehlerursache war (zb beim versuch mit dem cmd.exe befehl ``move`` dateien aus einer cd-room (read only) zu verschieben)

ansonten kann ich dir auch nichr viel weiterhelfen :cry: :cry:

Verfasst: Montag 15. Oktober 2007, 12:48
von jens
Ist der Pfad bei os.makedirs wirklich der selbe, wie bei open?
Existiert wirklich der Pfad? Kannst du darin selber Dateien erzeugen (also im explorer)?
IMHO immer den Laufwerk-Buchstaben hinzufügen...

Verfasst: Montag 15. Oktober 2007, 16:14
von Jan-Peer
Ja, das ging (und geht) alles. Die relativen Pfadangaben haben unter Linux gut funktioniert, darum verwunderte mich dieser Fehler dann doch etwas. Ich habe jetzt alle irgendwo im Programm auftauchenden Angaben in absolute Pfade umgewandelt, und jetzt funktioniert es auch unter Windows -
Ich bin jetzt um eine interessante Erfahrung reicher.

Vielen Dank für Euer Bemühen

Jan-Peer