Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei Dateinamen (https://www.delphipraxis.net/136597-fehler-bei-dateinamen.html)

Larsi 3. Jul 2009 13:29


Fehler bei Dateinamen
 
Hi,

ich erstelle in Delphi einen Stream (Wavestream) und beim Abspeichern meckert er immer mit dem Dateinamen rum:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project10.exe ist eine Exception der Klasse EFCreateError mit der Meldung 'Datei "C:\Users\Lars\Desktop\Chris Brown - Run It! (Main Version)
.wav" kann nicht erstellt werden. Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Wenn ich nun aber den gleichen Dateiname mit diesem Zeichen ' abgetrennt im Programmcode eingebe funktioniert auch alles aber die Namen sind ja variabel also bringts das net.

MFG Larsi

Teekeks 3. Jul 2009 13:33

Re: Fehler bei Dateinamen
 
Es kommt im Pfad ein Leerzeichen vor. An dieser stelle geht er davon aus das der Pfad da zuende ist. Er geht also davon aus das deine Datei Chris heißt und mit den Parametern " Brown - Run It! (Main Version).wav"
Aufgerufen wird.

"Chris" ist aber kein zulässiger Dateiname da keine Endung...

gruß Teekeks

Edit: Natürlich nicht "Lehrzeichen" ^^

Tyrael Y. 3. Jul 2009 13:37

Re: Fehler bei Dateinamen
 
Dein Freund nennt sich

Delphi-Quellcode:
 meineDateiEndung := '.lov';
 meinStringMitAnführungszeichen := QuotedStr('Ein String mit Leerstellen' + meineDateiEndung);

himitsu 3. Jul 2009 15:04

Re: Fehler bei Dateinamen
 
also ich kann mir eigentlich nicht vorstellen, warum EFCreateError einen String mit " benötigt? :gruebel:
(wäre jedenfalls eigenartig, wenn dem so sei)

Bist du sicher, daß beim "zusammenbauen" des Strings kein Fehler unterläuft? (ungültige Zeichen im String)

Die Muhkuh 3. Jul 2009 15:14

Re: Fehler bei Dateinamen
 
Liegt das am Umbruch der DP oder ist vor der Datei-Endung wirklich ein #13#10?

himitsu 3. Jul 2009 15:22

Re: Fehler bei Dateinamen
 
hab ich mit auch schon überlegt, aber ich glaub wegen der Leerzeichen kurz davor, daß daran mal nicht die DP Schuld ist :angel:

Mithrandir 3. Jul 2009 15:27

Re: Fehler bei Dateinamen
 
Zitat:

Zitat von Teekeks
"Chris" ist aber kein zulässiger Dateiname da keine Endung...

Warum nicht? Ich kann doch Dateien ohne Endung erstellen. Selbst Windows nutzt eine. :stupid:

Larsi 4. Jul 2009 16:18

Re: Fehler bei Dateinamen
 
Hab das jetzt mit QutoedString gemacht doch es kommt immernoch gleicher Fehler.

Die Muhkuh 4. Jul 2009 16:23

Re: Fehler bei Dateinamen
 
Ist da ein Umbruch drin oder ist das nur ein Darstellungsfehler in der DP?

jaenicke 4. Jul 2009 16:27

Re: Fehler bei Dateinamen
 
Wie sieht denn der Quelltext dafür konkret aus und was genau steht ggf. in den einzelnen Variablen drin?

Larsi 6. Jul 2009 12:29

Re: Fehler bei Dateinamen
 
Also egal wie der Dateiname heißt es wird immer ein Umbruch in der Fehlermeldung vor dem .wav gemacht. Woran liegt das?

Zitat:

Zitat von jaenicke
Wie sieht denn der Quelltext dafür konkret aus und was genau steht ggf. in den einzelnen Variablen drin?

Also den Filstream übergebe ich das als Filename. In k steht der Wert eines Items in einem Statuspanel!

Delphi-Quellcode:
'C:\Users\Lars\Desktop\' + k +  '.wav'

Zitat:

Zitat von Teekeks
Es kommt im Pfad ein Leerzeichen vor. An dieser stelle geht er davon aus das der Pfad da zuende ist. Er geht also davon aus das deine Datei Chris heißt und mit den Parametern " Brown - Run It! (Main Version).wav"
Aufgerufen wird.

"Chris" ist aber kein zulässiger Dateiname da keine Endung...

gruß Teekeks

Edit: Natürlich nicht "Lehrzeichen" ^^

Klingt irgendwie sinnig aber ich brauch ja die Leerzeichen in dem Filename, gibts da eine Funktion, die einem da hilft?

MFG Larsi

Sherlock 6. Jul 2009 12:31

Re: Fehler bei Dateinamen
 
Die Funktion heisst Gänsefüßchen (oben).

Wenn Du Deinen Dateinamen inklusive Pfad damit umschließt...dann geht das.

Beispiel:
Delphi-Quellcode:
FileNameString:='"c:\ein Ordner mit Leerzeichen\eine Datei mit Leerzeichen.txt"'

;)

Sherlock

DeddyH 6. Jul 2009 12:32

Re: Fehler bei Dateinamen
 
Wie sieht es denn so aus?
Delphi-Quellcode:
Format('"C:\Users\Lars\Desktop\%s.wav"',[trim(k)])

Larsi 6. Jul 2009 12:36

Re: Fehler bei Dateinamen
 
@DeddyH: Dann kommt der Fehler:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project10.exe ist eine Exception der Klasse EFCreateError mit der Meldung 'Datei "C:\Users\Lars\Desktop\Elefante\"C:\Users\Lars\Des ktop\Shaggy Featuring Rayvon - Angel.wav"" kann nicht erstellt werden. Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

DeddyH 6. Jul 2009 12:40

Re: Fehler bei Dateinamen
 
Steht der ganze Pfad schon in k, oder wie muss ich das verstehen?

Larsi 6. Jul 2009 12:43

Re: Fehler bei Dateinamen
 
Nein! In k steht nur der richtige Dateiename ohne Pfad. Hab mir k per ShowMessage ausgeben lassen.

DeddyH 6. Jul 2009 12:44

Re: Fehler bei Dateinamen
 
Dann müsste mein Beispiel aber funktionieren. Zeig mal etwas Code, der Fehler muss woanders liegen.

Larsi 6. Jul 2009 12:49

Re: Fehler bei Dateinamen
 
Also es geht mir bei dem ganzen Filename Dingens ja darum, dass wenn man in meinem StreamZ eine Aufnahme startet (über BassdllPlayer), dass die Aufnahme dann heißt wie das aktuelle Lied. Über eine Funktion liefert BassdllPlayer den Titel und Interpreten der Online Streams. Diesen zeige ich direkt in einem Statusbarpanel an. Über die Funktion StartRecording verusche ich den Dateinamen zu übergeben, doch das klappt bei den Titeln ja irgendwie nicht. Viel mehr Code als die Zeile die ich gepostet habe steckt da nicht hinter. Hier mal die Funktion StartRecording von Bassdllplayer:
Delphi-Quellcode:
procedure TBassdllPlayer.StartRecording(Input: integer; FileName: string);
var
  i: Integer;
begin
  //F ile Stream
  WaveStream := TFileStream.Create(FileName, fmCreate);

  if WaveStream.Size > 0 then
  begin // free old recording
    BASS_StreamFree(Channel);
  end;

  // generate header for WAV file
  WaveHdr.riff := 'RIFF';
  WaveHdr.len := 36;
  WaveHdr.cWavFmt := 'WAVEfmt ';
  WaveHdr.dwHdrLen := 16;
  WaveHdr.wFormat := 1;
  WaveHdr.wNumChannels := 2;
  WaveHdr.dwSampleRate := 44100;
  WaveHdr.wBlockAlign := 4;
  WaveHdr.dwBytesPerSec := 176400;
  WaveHdr.wBitsPerSample := 16;
  WaveHdr.cData := 'data';
  WaveHdr.dwDataLen := 0;

  WaveStream.Write(WaveHdr, SizeOf(WAVHDR));
  i := 0;
  while BASS_RecordSetInput(i, BASS_INPUT_OFF) do
  begin
    i := i + 1;
  end;
  BASS_RecordSetInput(input, BASS_INPUT_ON);

  // start recording @ 44100hz 16-bit stereo
  recordchannel := BASS_RecordStart(44100, 2, 0, @RecordingCallback, 0);
  if recordchannel = 0 then
  begin
    ShowMyMessage('Die aufnahme kann nicht gestarted werden.', TRUE);
    WaveStream.Free;
  end;

  isRecording := True;
end;

DeddyH 6. Jul 2009 12:59

Re: Fehler bei Dateinamen
 
Tja, dann würde ich Filename einmal analysieren, da scheint ein Zeilenumbruch drinzustehen.

Larsi 6. Jul 2009 13:02

Re: Fehler bei Dateinamen
 
Wie analysiere ich den denn? :|

DeddyH 6. Jul 2009 13:03

Re: Fehler bei Dateinamen
 
Breakpoint setzen und die Variable anzeigen lassen wäre eine Möglichkeit.

Larsi 6. Jul 2009 13:04

Re: Fehler bei Dateinamen
 
Und an welcher Stelle, in der Unit oder ein meiner Anwendung?

Larsi 6. Jul 2009 13:17

Re: Fehler bei Dateinamen
 
Habs hingekriegt. Mit Trimright(k); Danke für eueren Hinweis mit dem Zeilenumbruch. :dp:

DeddyH 6. Jul 2009 13:18

Re: Fehler bei Dateinamen
 
Das sag ich doch die ganze Zeit :roll:

angos 6. Jul 2009 13:19

Re: Fehler bei Dateinamen
 
hi,

hast du noch nie Beakpoints verwendet?

Du klickst einfach an der entsprechenden Stelle im Sourcecode links neben die Zeile. Da kommt dann ein roter Punkt und die zeile wird ebenfalls rot dargestellt.
Wenn du nun das Programm mit F9 startest, springt das automatisch in den Source an die entsprechende Stelle zurück, sobald das Programm an der Stelle angelangt ist.

Wenn du nun mit der Maus über die einzelnen Variablen gehst, gibt dir Delphi die aktuellen Werte der Variablen aus. Alternative mit Strg+F7 und dort die Variable eintragen die du auswerten möchtest

Gruß
Ansgar

Larsi 6. Jul 2009 13:22

Re: Fehler bei Dateinamen
 
Echt :lol:

Mithrandir 6. Jul 2009 14:02

Re: Fehler bei Dateinamen
 
Du lachst über deine eigene Unwissenheit? Traurig... :roll:

Larsi 6. Jul 2009 14:17

Re: Fehler bei Dateinamen
 
Ich weiß wie man einen Breakpoint erstellt. Ich habe nur gedacht, dass Luckie das mit dem Analysieren anders meint, da ich ja weiß wo dem Filename was zugewiesen wird und wo er erstellt wird.

Die Muhkuh 6. Jul 2009 15:11

Re: Fehler bei Dateinamen
 
In Beitrag 5 schrieb ich das mit dem Zeilenumbruch, hättest Du gleich mal danach geguckt, aber ich werde anscheinend gekonnt ignoriert... :roll:

DeddyH 6. Jul 2009 15:15

Re: Fehler bei Dateinamen
 
[OT] Hat hier jemand was gepostet? :twisted: :mrgreen: [/OT]

Die Muhkuh 6. Jul 2009 15:16

Re: Fehler bei Dateinamen
 
Nö, siehst Du was? :stupid:


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

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