_FileCopyEx

  • Funktionsnamen "_ArrayFileCopy" geändert in "_FileCopyEx" (finde ich passender).


    Die Funktion habe ich noch etwas erweitert.
    Man muss jetzt zwei Arrays übergeben. Eines mit den Quelldateien und eines (genauso groß) mit den Zielverzeichnissen.
    Somit kann man für jede Quelldatei angeben, wohin sie kopiert werden soll. Damit kann man die Funktion auch zum patchen von Programmen verwenden oder als Ersatz für DirCopy.
    Um das kopieren ganzer Verzeichnisse (DirCopy) mit meiner Funktion zu erleichtern, habe ich eine Helper-Funktion "_FileCopyEx_CreateArrays" geschrieben, die nach Übergabe des Quellverzeichnisses und des Zielverzeichnisses die für "_FileCopyEx" benötigten Arrays erstellt. Das hört sich jetzt komplizierter an, als es eigentlich ist. Schaut euch einfach das Beispiel an. :)


    Mit Angabe des Flags bei der Funktion kann man folgendes erreichen:
    ; 0 = kein überschreiben einer existierenden Zieldatei (Standardwert)
    ; 1 = überschreiben einer existierenden Zieldatei
    ; 2 = die Datums- und Zeitinformationen der Quelldateien werden auf die Zieldateien kopiert
    ; 4 = wenn Kopiervorgang beendet, warten bis der Anwender auf [Ok] klickt
    ; 8 = erstelle Zielverzeichnis, wenn es noch nicht existiert
    ; 16 = erstelle ein Log-String

    ; 32 = FileMove statt FileCopy (Quelldateien werden nach erfolgreichen kopieren geloescht)


    Nach dem kopieren jeder Datei wird die Dateigröße der Quelldatei mit der Größe der Zieldatei verglichen. Nur wenn diese gleich groß sind, wird der Kopiervorgang als erfolgreich angesehen.
    Ansonsten gibt es eine Fehlermeldung.


    In dieser Version ist jetzt auch die Progressbar von UEZ wieder dabei, wie ich sie ja auch schon bei "_DownloadWithProgress" verwendet habe. Nochmals: Vielen Dank, UEZ! :thumbup:


    Ich habe das Script auch ausführlich kommentiert, sodass man (hoffentlich) nachvollziehen kann, was da im einzelnen passiert. :)


    Neue Version (30.11.2018):

    - Wenn man beim Flag das Bit 6 (Wert 32) setzt, wird ein FileMove statt FileCopy ausgeführt. Alle erfolgreich kopierten Quelldateien werden anschließend im Quellverzeichnis gelöscht.

  • Gab es je gerade so ungefähr als Thema.
    Gerade brauche ich das nicht. Das aber schnell parat zu haben ist toll!


    (Deine UDF _GuiCtrlSetImageEx.au3 benutze ich praktisch ständig. Sehr häufig nutze ich auch deine UDF _DownloadWithProgress.au3)
    Also vielen Dank für deine ganze Arbeit Oscar. :thumbsup:

  • S U P E R und D A N K E ! ! !

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Hi Oscar !


    Mir ist gerade eine Kleinigkeit aufgefallen (kein Bug, aber ggf. ein Stolperstein für Einsteiger).

    Bindet man die UDF in ein Skript ein welches Opt('MustDeclareVars', 1) setzt, dann kommt es zu :

    "C:\AutoIt\Projekte\Tests\_FileCopyEx.au3" (208) : ==> Variable used without being declared.:

    $sBuffer = FileRead($hSource, $iBufferSize)

    ^ ERROR


    EDIT :

    Leicht zu fixen, und sicher kein Grund eine "neue Version" der UDF zu posten !

    Wenn man - z.B. in Zeile 116 - einfach ,$sBuffer = '' hinzufügt

    ==> Local $sSourceFile = '', $sDestFile = '', $sLog = '', $iRet = 0, $iError = 0, $iBufferSize = 0 , $sBuffer = ''

    dann läuft es; das sollte jede(r) selbst hinbekommen ;).


    -> Nebensächlich (nur falls Du das bereinigen möchtest) :

    In der Funktionsbeschreibung des Beispiels, also _FileCopyEx-Beispiel.au3, fehlen :

    - das neue Flag : 32 = FileMove statt FileCopy ...

    - der neue Return Value : 128 = wenn FileMove statt FileCopy ausgewaehlt wurde ...

    (in der UDF werden sie beschrieben - das ist sicher völlig ausreichend)


    Frohe Ostern und Gruß

    Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi ()