zipfile/Datei schreiben unter Windows: Permission denied

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Montag 15. Oktober 2007, 10:30

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?
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Montag 15. Oktober 2007, 12:39

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:
cp != mv
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 15. Oktober 2007, 12:48

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Montag 15. Oktober 2007, 16:14

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
Antworten