Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CopyFile und Leerzeichen bzw. Gänsefüsschen (https://www.delphipraxis.net/135489-copyfile-und-leerzeichen-bzw-gaensefuesschen.html)

SearchBot 11. Jun 2009 18:07


CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Ich mache das gerade mit TurboDelphi (Borland® Delphi® für Microsoft® Windows™ Version 10.0.2288.42451 Update 2)
auf Windows VISTA, aber nicht auf der Platte C, sondern D - da laufen alle Programme ohne Starterlaubnisabfrage! Komischerweise.

Ich möchte meine MP3-Sammlung sortieren - klar gibts dafür schon Tools, aber Selbst-Ist-Der-Mann!
In meinem Projekt will ich anhand des Dateinamens Ordner anlegen und dann die Lieder dorthinein verschieben/kopieren.

zB habe ich 2 MP3s:
Code:
Mordi - Conical [Remix].mp3
Doron Deutsch - Forbidden Forest (2008 return to jungle mix) .mp3
Ich mache es aber so:
Ich kopiere den Namenstring bis zum " - ", das ist eindeutig und bei allen MP3s so, die ich habe (von hier: http://remix.kwed.org - wen es interessiert). Der ist dann in der Variable n gespeichert.

Dann lege ich mit
Delphi-Quellcode:
  if not DirectoryExists(DirectoryListBox2.Directory+'\'+n) then
   CreateDir(DirectoryListBox2.Directory+'\'+n);
das neue Verzeichnis an, wenn nicht schon vorhanden, klappt jedesmal.

Jetzt kommt mein Problem: CopyFile bzw MoveFile
Aber erst mal zum Testen mit CopyFile.

Delphi-Quellcode:
Fvon:=format('%s\%s',[Filelistbox1.Directory,Filelistbox1.Items[i]]);
Fnach:=format('%s\%s\%s',[Filelistbox2.Directory,n,Filelistbox1.Items[i]]);
windows.CopyFile(PAnsiChar(Fvon),PAnsiChar(Fnach),false);
Das klappt bei allen MP3 von Mordi.
Die von Doron Deutsch werden aber nicht kopiert. Der Ordner bleibt leer.

Jaa, klar, die Gänsefüßchen fehlen, hab ich gedacht:
Delphi-Quellcode:
windows.CopyFile(PAnsiChar('"'+Fvon+'"'),PAnsiChar('"'+Fnach+'"'),false);
Nö, der Ordner bleibt leer.

Aah.. der Pufferabschluss fehlt:
Delphi-Quellcode:
windows.CopyFile(PAnsiChar('"'+Fvon+'"'+#0),PAnsiChar('"'+Fnach+'"'+#0),false);
windows.CopyFile(PAnsiChar(Fvon+#0),PAnsiChar(Fnach+#0),false);
Nö, weder noch, der Ordner bleibt leer.

Im Forum rumgesucht... Ersetzen der Leerzeichen durch %20 - erfolglos. Andere Kopiermethode mit FileStream - erfolglos.

Irgendwie ist das Leerzeichen im Ordnernamen funktionsbehindernd und ich weiß nicht, wie ich das lösen soll. Ich weiß, man kann es irgendwie mit Gänsefüßchen " machen, aber ich weiß nicht wie, ich habe ja schon allerlei Möglichkeiten durchprobiert.

:gruebel:
Kann mir bitte jemand (zu mehr Verständnis ver)helfen?

Fridolin Walther 11. Jun 2009 18:10

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Zitat:

Zitat von SearchBot
Kann mir bitte jemand (zu mehr Verständnis ver)helfen?

Lass Dir mal FVon und FNach vor dem CopyFile ausgeben via ShowMessage z.B.. Einfach um sicher zu gehen das die Pfade korrekt zusammengesetzt werden. Außerdem wäre der Rückgabewert von GetLastError nützlich.

SimStar001 11. Jun 2009 18:12

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Also bei mir klappts mit
Delphi-Quellcode:
createdir('C:\Test Leerzeichen');
wie lautet dein Pfad zum erstellen?

DeddyH 11. Jun 2009 18:14

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Das Erstellen des Ordners ist ja nicht das Problem.

SimStar001 11. Jun 2009 18:16

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Ups, Thema verfehlt! Sorry :wall:

SearchBot 11. Jun 2009 19:33

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Zitat:

Zitat von 0xF30FC7
Lass Dir mal FVon und FNach vor dem CopyFile ausgeben via ShowMessage z.B.. Einfach um sicher zu gehen das die Pfade korrekt zusammengesetzt werden. Außerdem wäre der Rückgabewert von GetLastError nützlich.

Die Pfade sind korrekt.

hmm...
oh?

:gruebel:

:pale:

:wall:

Ich habe bei n ein Zeichen zuviel kopiert, dummerweise ein fast nicht sichtbares Leerzeichen am Ende des Strings...

Aber eigentlich sollte das von
Delphi-Quellcode:
  if pos(#32,n)=length(n) then delete(n,length(n),1);
entfernt werden, hat aber irgendwie nicht geklappt...

Jetzt :thumb:
Danke für Eure Hirnanstöße. :zwinker:

DeddyH 11. Jun 2009 19:36

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Mit Trim() wäre das einfacher gegangen ;)

himitsu 11. Jun 2009 19:46

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Delphi-Quellcode:
if pos(#32,n)=length(n) then delete(n,length(n),1);
Pos findet das erste Leerzeichen

und die Abfrage lautet hier
> lösche letztes Zeichen, wenn es nur ein Leerzichen gibt und dieses am Ende des Strings liegt :angel:

SearchBot 11. Jun 2009 21:34

Re: CopyFile und Leerzeichen bzw. Gänsefüsschen
 
Achja,

ich werde alt.
Und habe schon länger kein Delphi mehr gemacht, da vergesse ich langsam den Wortschatz.

Trim! Klar.
Pos-Denkfehler. Owei.

Danke für die Entkalkung meiner Denkzentrale.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz