Ich versuche, eine Datei mit mehreren Dateien zu entpacken, die im Zielverzeichnis vorhanden sind oder nicht. Es scheint, dass das Standardverhalten eine Ausnahme auslöst, wenn die Datei bereits existiert.
Wie entzippe ich in ein Verzeichnis und überschreibe einfach vorhandene Dateien?
Hier ist mein Code:
%Vor%Es sieht so aus, dass extract () einen optionalen Block (onExistsProc) benutzt, der es erlaubt, zu bestimmen, was mit der Datei geschehen soll, wenn sie bereits existiert - true zurück zum Überschreiben, false, um eine Ausnahme auszulösen.
Wenn Sie einfach alle vorhandenen Dateien überschreiben möchten, können Sie Folgendes tun:
%Vor%Wenn Sie eine komplexere Logik verwenden möchten, um bestimmte Einträge anders zu behandeln, können Sie Folgendes tun:
%Vor%BEARBEITEN: feste Antwort - wie von Ingmar Hamer hervorgehoben, hat meine ursprüngliche Antwort den Block als Parameter übergeben, wenn es mit der obigen Syntax erwartet wird.
Nur um anderen die Probleme zu ersparen:
Der Auszug-Befehl in Antwort 2 ist falsch:
Der dritte (proc) Parameter wird mit einem kaufmännischen Und angegeben, was bedeutet, dass ruby erwartet, dass er sich in {} -Brackets nach dem Methodenaufruf wie folgt befindet:
%Vor%oder (wenn Sie komplexere Logik benötigen)
%Vor%Wenn Sie das in Post # 2 angegebene Beispiel verwenden, erhalten Sie eine Fehlermeldung "ungültige Argumente (3 für 2)" ...
Bearbeiten: Modifizierter Code zum Entfernen der Zieldatei, wenn sie vorher existiert.
%Vor%Bearbeiten: Geänderter Code, um das Zielverzeichnis zu entfernen, falls es vorher existiert.
%Vor%Hier ist der Originalcode von Mark Needham :
%Vor%Dieser Link hier bietet einen guten Zweck Beispiel, das ich überprüft habe, funktioniert. Es muss nur eine Anforderung "fileutils" hinzugefügt werden.