Backslash-Problem



  • Ich habe folgendes Problem: Ich habe Dateinamen in einer Paradox7-Tabelle gespeichert die ich über eine Table-Komponente anspreche. In der Paradox-Tabelle sehen die gespeicherten Dateinamen auch ganz normal aus, also zum beispiel "C:\Windows\Irgendwas.mp3". Wenn ich die Dateinamen jetzt aber mit Table1->FieldByName("Filename")->AsString auslese erhalte ich immer das folgende Ergebnis: "C:\\Windows\\Irgendwas.mp3", was natürlich nicht funktioniert wenn ich die Datei nachher mit dem TMediaPlayer abspielen möchte. In der Paradox-tabelle ist das Feld als Alphanummerisch definiert. Kann mir jemand sagen wie ich das problem mit dem doppelten Backslash lösen kann? Alle anderen Felder in der Tabelle lassen sich ohne Probleme ansprechen.

    Danke & LG
    Seddto 🙂



  • Das ist schon ok so!

    Intern (in Strings) werden '\' immer doppelt codiert. Ein einfacher '\' wuerde den folgenden Buchstaben maskieren.

    Uebergib das einfach an TMedia... und gut is.



  • Nee eben nicht gut ist. Der String wird nämlich nicht automatisch umgewandelt. Wenn ich ihn dem TMediaPlayer übergebe bekomme ich die Fehlermeldung, das die Datei "C:\\Windows\\irgendwas.mp3" nicht existiert. In einem anderem Programm, in dem ich auf die selbe tabelle zugreife stehen die Dateinamen auch richtig im String wenn ich zwischendurch debugge und mir den Stringinhalt angucke also "C:\Windows...usw.". In dem Programm wo es nicht klappt mache ich aber garnichts mit dem Filename außer auslesen und in der Paradox-tabelle steht es richtig, also mit einen Backslash. Weiss jemand ein Lösung?

    Danke & LG
    Seddto 🙂



  • Der Fehler muss woanders liegen. DerAltenburger hat absolut recht. In einem String fangen alle Sonderzeichen mit \ an. Gibt's noch mehr von \n (Return) \t (Tabulator) usw.



  • Hab ich mir auch fast schon gedacht, denn in dem ersten Programm läuft das auslesen aus der Datenbank auf die gleiche Weise und trotzdem klappts da, nur im zweiten Programm sind im String immer 2 BAckslash hintereinander. Das einzige was ich im zweiten Programm anders gemacht habe: Es werden zwei TTable Komponenten benutzt um gleichzeitig auf die gleiche Datenbank zuzugreifen (natürlich über 2 verschiedene Datasource-Kompos) aus folgendem Grund: Da ich in einer Timer-Funktion alle paar Sekunden die Tabelle von oben bis unten durchlesen und neu berechnen muss, möchte ich nicht das die Anzeigen im DBGrid auch alle paar Sekunden von oben nach unten wandert. Also wird mit Table1(der kein Anzeigeelement hat) neu berechnet(das Feld Filename wird aber weder gelesen noch verändert) und Table2 ist für die Anzeige im DBGrid zuständig, so das ich nach dem neu berechnen bei Table2 einfach nur refresh aufrufen muss. Könnte es daran vielleicht liegen?



  • Hallo seddto,

    ich glaube auch nicht, dass da wirklich zwei Backslashes sind...
    Du könntest mal die Variable, in der dein Dateiname steht mit

    ShowMessage(blahblah);

    ausgeben lassen - sind dann immer noch zwei Backslashes vorhanden, oder zeigt dir nur der Debugger die beiden Backslashes an?

    tschüss
    Robert


Anmelden zum Antworten