1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan
  5. Helfer und Tools

COPY und RENAME streiken

  • Altprofaner
  • 29. August 2017 um 08:43
  • Altprofaner
    Gast
    • 29. August 2017 um 08:43
    • #1

    Mit folgendem Problem ärgere ich mich im Moment rum:
    Der XProfan-Befehl COPY und RENAME verweigern die Ausführung ohne Fehlermeldung, wenn die Datei, die bearbeitet werden soll, freie Stellen im Namen hat.
    Beispiel:

    Das ist ein Test.txt

    Auch Versuche mit Translate$ mit CHR$(160) oder CHR$(32) schlagen fehl.
    Wie kann ich in XProfan hier eine Lösung bekommen ?

    Danke für einen Lösungsvorschlag

  • dönertier
    Gast
    • 29. August 2017 um 11:07
    • #2
    Code
    Def @SHFileOperation(1) !"SHELL32","SHFileOperationA"
    
    
    Proc Fileaction
    
    
        Parameters Action$,File$,File2$,noconfirm%,norecycle%
        Parameter 1: Auszuführende Aktion=COPY, DELETE, RENAME, MOVE
        Parameter 2: Quelldatei
        Parameter 3: Zielldatei
        Parameter 4: 0 = User erst fragen, 1= ohne Nachfrage löschen
        Parameter 5: 0 = In Papierkorb verschieben, 1= "endgültig" löschen
        Declare FOF_Flag%,Action&,DO%,Fehler&
        Declare opstruct#,file#,file2#
        LET DO%=0
    
    
        IF @upper$(Action$)="RENAME"
    
    
            Let Action&=4
    
    
        elseIF @upper$(Action$)="COPY"
    
    
            Let Action&=2
    
    
        elseIF @upper$(Action$)="MOVE"
    
    
            Let Action&=1
    
    
        elseIF @upper$(Action$)="DELETE"
    
    
            Let Action&=3
    
    
        else
    
    
            @messagebox("Diese Funktion ist nicht bekannt!","Aktion wird nicht ausgeführt!",64)
            LEt DO%=1
    
    
        endif
    
    
        IF DO%=0
    
    
            Case noconfirm% : Let noconfirm%=16
            CaseNot norecycle% : Let norecycle%=64
            Let FOF_Flag% = @or(noconfirm%,norecycle%)
            Dim opstruct#,30
            Dim file#,Add(Len(file$),2)
            Dim file2#,Add(Len(file2$),2)
            String file#,0=@Add$(file$,@Chr$(0))
            String file2#,0=@Add$(file2$,@Chr$(0))
            Long opstruct#,0=%hwnd   Handle des aufrufenden Fensters
            Long opstruct#,4=Action&
            Long opstruct#,8=file#    pfrom : hier der zu löschende Ordner
            Long opstruct#,12=file2#      pto (muß 0 oder eine Bereichvar. mit Zieldateinamen																							 z.B. bei Umbenennung sein
            Word opstruct#,16=FOF_Flag%
            Long opstruct#,18=0	 	Hier steht nach dem Aufruf 1, wenn User abgebrochen hat
            Long opstruct#,22=0	  Unbedingt immer auf Null setzen!
            Long opstruct#,26=0	  Zeiger(Bereich) auf Überschrift des Fortschrittsdialogs
            LET FEHLER&=@ShFileOperation(opstruct#)
    
    
            IF @equ(@long(opstruct#,18),1)
    
    
                @MessageBox("Die Dateioperation wurde abgebrochen!","Operation abgebrochen!",64)
    
    
            ELSEIF @neq(Fehler&,0)
    
    
                @MessageBox("Es ist ein Fehler aufgetreten","ShFileOperation "+@str$(Fehler&),16)
    
    
            EndIf
    
    
            Dispose file#
            Dispose file2#
            Dispose opstruct#
    
    
        endif
    
    
    EndProc
    
    
    REM Beispiel
    Fileaction "COPY","C:WINDOWS","E:TEMP",0,0
    Fileaction "DELETE","E:TEMP","",1,1
    Alles anzeigen
  • Altprofaner
    Gast
    • 29. August 2017 um 11:32
    • #3

    @dönertier
    Die Procedur habe ich und hier kommt die Fehlermeldung "Es ist ein Fehler aufgetreten"
    Es geht mir um Dateinamen mit Leerstellen im Namen:

    das ist ein beispiel.txt
    das ist ein beispiel.png usw.

    Windows-7 und 10 haben damit kein Problem.
    XProfan müsste da aktualisiert werden.
    Anscheinend liest hier der Compiler noch die Namen aus der DOS-Zeit
    und da waren Leerstellen verpönt

  • Jac de Lad
    Meister
    Reaktionen
    132
    Beiträge
    1.657
    • 29. August 2017 um 15:14
    • #4

    Hast du schon mal versucht die Dateinamen in " einzufassen, also so:
    dateiname$="\q"+dateiname$+"\q"
    ..entsprechend passend in deinem Quelltext.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)/PureBasic 6.00/RAD Studio 11 (Alexandria)/Perl 5.34.00/Python 3.10.0
    Ryzen 5800X/Gigabyte B550m DS3H/32GB RAM@3600MHz/Radeon HD7770 OC/Asus Xonar SE/46TB HDD+512GB Samsung 980 Pro+2TB Crucial SSD/28" Samsung 4k
    Synology DS920+ mit 42TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 9 Pro (12GB/256GB)
    https://jacdelad.bplaced.net

  • Volkmar
    Moderator
    Reaktionen
    6.995
    Beiträge
    6.929
    • 29. August 2017 um 16:01
    • #5

    Ich habe das eben mal mit X2 ausprobiert und habe mit Leerzeichen im Dateinamen kein Problem. Sowohl Copy als auch Rename funktionieren bei mir auch ohne Anfürungszeichen um den Namen herum.

    Gruß Volkmar

  • Altprofaner
    Gast
    • 29. August 2017 um 16:09
    • #6

    @jac
    So heißt die Datei im Original:

    red john ist tot - the mentalist jane tötet red john.mp4

    und so wird sie nach deinem Tipp gelesen:

    "redjohnisttot-thementalistjanetötetredjohn.mp4"

    Ohne deinen Tipp wird die Datei ohne Anführungszeichen angezeigt.
    Natürlich wird sie bei beiden Alternativen dann nicht gefunden.
    Die Leerstellen werden von den XProfan-Befehlen nicht akzeptiert.
    Hatte schon versucht, mit
    dateiname$=Tranlate$(dateiname$," ","_") umzuschreiben. Klappt nicht ! :(

  • Volkmar
    Moderator
    Reaktionen
    6.995
    Beiträge
    6.929
    • 29. August 2017 um 16:15
    • #7

    Das kann aber nicht ganz stimmen. "\q" + textstring + "\q" ergibt textstring in Anführungszeichen, dabei werden grundsätzlich keine Leerzeichen entfernt!
    Und natürlich kann es nicht klappen, den Dateinamen in irgend einer Form mittels Translate$ zu verändern. Dann ist es ja nicht mehr der richtige Name.

    Gruß Volkmar

  • Altprofaner
    Gast
    • 29. August 2017 um 16:39
    • #8

    @Volkmar
    Als Gast kann ich leider kein Bild zeigen, aber so wie ich geschrieben habe, stellt sich nach dem "\q"+dateiname$+"\q" der Name dar.
    Es werden alle Leerzeichen entfernt
    Wahrscheinlich muss ich "aufrüsten"
    Meine XProfan-Version ist 12.1b-NT
    Aber ich bin ja auch ein "Altprofaner" ;)
    Danke für eure Hilfe :top:

  • Jac de Lad
    Meister
    Reaktionen
    132
    Beiträge
    1.657
    • 29. August 2017 um 16:41
    • #9

    Nein, du kannst die Leerzeichen nicht einfach löschen oder ersetzen: Sie gehören zum Dateinamen dazu. Wie Volkmar schon schrieb werden bei meiner Version keine Leerzeichen entfernt, sondern nur die " hinzugefügt:

    Copy "\q"+quelle$+"\q" > "\q"+ziel$+"\q" sollte stets funktionieren...

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)/PureBasic 6.00/RAD Studio 11 (Alexandria)/Perl 5.34.00/Python 3.10.0
    Ryzen 5800X/Gigabyte B550m DS3H/32GB RAM@3600MHz/Radeon HD7770 OC/Asus Xonar SE/46TB HDD+512GB Samsung 980 Pro+2TB Crucial SSD/28" Samsung 4k
    Synology DS920+ mit 42TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 9 Pro (12GB/256GB)
    https://jacdelad.bplaced.net

  • AxT
    Premium-Mitglied
    Reaktionen
    2.978
    Beiträge
    33.384
    • 29. August 2017 um 16:48
    • #10

    Das liegt wohl eher an deinem Code vor Copy / Rename - nicht an XProfan. Hab XProfan9.

  • Volkmar
    Moderator
    Reaktionen
    6.995
    Beiträge
    6.929
    • 29. August 2017 um 16:49
    • #11

    Hallo Altprofaner, mal schnell in Profan10 probiert

    Code
    Declare Name$
    Name$ = "Irgend ein Name mit Leerzeichen"
    Name$ = "\q" + Name$ + "\q"
    Print Name$
    WaitInput

    Auf dem Bildschirm steht dann:
    "Irgend ein Name mit Leerzeichen"
    Und die Version war noch viel älter. Es sollte auch bei Dir laufen.

    Gruß Volkmar

  • Altprofaner
    Gast
    • 29. August 2017 um 16:59
    • #12

    An Alle
    So sieht mein aktueller Code aus

    COPY "\q"+nameL$+"\q" > "\q"+nameR$+"\q"

    Der Dateiname und das Verzeichnis werden aus einer Gridbox gelesen.

    nr%=GETCURSEL(winL&)
    Dateiname$=GETTEXT$(winL&,nr%)
    nameL$=lwL$+"\\"+Dateiname$
    nameR$=lwR$+"\\"+Dateiname$

    Bis hier alles OK, will ich nun kopieren, werden die Leerzeichen entfernt.
    Es ist leider so :(

  • Altprofaner
    Gast
    • 29. August 2017 um 17:45
    • #13

    Denkfehler meinerseits !
    Um in den Gridboxen Verzeichnisse und Dateien zu unterscheiden, habe ich beim Einlesen mit Addstring "*.*"
    das Vorzeichen bei den Verzeichnissen "[" mit CHR$(32) ersetzt
    Dateien bekamen das Vorzeichen CHR$(160) (Abgeguckt bei Frank Abbing ;) )
    Jetzt mein Denkfehler:
    Bei Dateinamen habe ich auch mit Translate das Zeichen CHR$(32) entfernt, obwohl hier nicht nötig ist.
    Ich habe also selbst die Leerzeichen entfernt ! :oops::oops::oops:
    Nachdem ich diese eine Codezeile geremt hatte, funktioniert jetzt alles, wie es soll
    Danke noch einmal an alle Profaner ! :top:

  • Jac de Lad
    Meister
    Reaktionen
    132
    Beiträge
    1.657
    • 29. August 2017 um 17:51
    • #14
    Zitat von Altprofaner

    Denkfehler meinerseits !

    Besser spät als nie. :top: Das geht mir quasi jeden Tag so. :thumbup:

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)/PureBasic 6.00/RAD Studio 11 (Alexandria)/Perl 5.34.00/Python 3.10.0
    Ryzen 5800X/Gigabyte B550m DS3H/32GB RAM@3600MHz/Radeon HD7770 OC/Asus Xonar SE/46TB HDD+512GB Samsung 980 Pro+2TB Crucial SSD/28" Samsung 4k
    Synology DS920+ mit 42TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 9 Pro (12GB/256GB)
    https://jacdelad.bplaced.net

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™