Hilfe: Problem beim konvertieren von AnsiString und StringReplace
-
OpenDialog1->DefaultExt = "*"; OpenDialog1->FileName = "*.*"; if (OpenDialog1->Execute()) { AnsiString strPfad = OpenDialog1->FileName; // Auslesen des Filenames strPfad = StringReplace(strPfad,"\\","/",TReplaceFlags() << rfReplaceAll); // Backslash drehen Label3->Caption = strPfad; // Ausgeben in Label FSOUND_Init(44100,32,0); FSOUND_STREAM *stream = FSOUND_Stream_Open(Label3->Caption.c_str(),0,0,0); }Also das Problem ist, dass "OpenDialog1->FileName" den Pfad als AnsiString ausliest, beim übergeben in der Funktion FSOUND_Stream_Open der Pfad als const char* übergeben werden soll .. deswegen wollten wir den Pfad mit c_str() von AnsiString zu const char* konvertieren.
Als zweites gibt uns der Borland Compiler ein Fehler aus wenn im Pfad anstatt "/", "\" steht .. deswegen wollten wir das mit StringReplace drehen.
Wenn wir die zwei Funktionen da auf den Pfad ausführen, hat der zwar den Slash umgedreht und anscheinend auch von AnsiString nach char konvertiert, da keine Fehlermeldung mehr kommt von wegen konvertierung nicht möglich, aber nen Fehler kommt trotzdem noch und zwar:
Im projekt ist eine Exeption der Klasse EAccessViolation aufgetreten.Meldung:
Zugriffsverletzung bei Adresse ... in Modul fmod.dll .... usw.Der selbe Fehler kam auch, als wir den Pfad manuell mit falschen Slash eingegeben haben.
Wir haben alle möglichen varianten ausprobiert, deswegen könnts sein das der Quellcode da oben etwas verwirrend ist.
So nun hoff ich, dass ich nicht all zu verwirrend geschrieben habt und ihr mir evt. helfen könntet. Danke im vorraus.
Jac
-
Ich verstehe zwar nicht, wieso das ein Problem mit AnsiString und ReplaceString sein soll...
Normalerweise sollte der Aufruf so aussehen:
if (OpenDialog1->Execute()) { AnsiString strPfad = OpenDialog1->FileName; // Auslesen des Filenames FSOUND_Init(44100,32,0); FSOUND_STREAM *stream = FSOUND_Stream_Open(strPfad.c_str(),0,0,0); }Ich verstehe absolut nicht, warum die Backslashes duch Forwardslashes ersetzt werden sollen?!?
Grüße
-
Jacyrio schrieb:
Als zweites gibt uns der Borland Compiler ein Fehler aus wenn im Pfad anstatt "/", "\" steht .. deswegen wollten wir das mit StringReplace drehen.
Was ich mich frage ist, warum überhaupt "/" anstatt "\" im Pfad stehen. Wo kommen die Schrägstriche denn her?
Vielleicht könntest Du ja noch mit FileExists() überprüfen, ob die durch den FileOpenDialog übergebene Datei überhaupt
existiert.Gruß,
Alexander
-
Also, wenn ich aus dem Dialogfeld auslese, dann hat der die Slashs so "C:\bla.mp3" .. aber so nimmt die Funktion FSOUND....Open() das nicht an, dann kommt dieser Fehler wenn der Slash so rum ist, also wollte ich den drehen zu "C:/bla.mp3", weil so gehts dann, jedenfalls wenn ich das manuell eingebe... sobald ich das mit StringReplace umdrehen will kommt dieser Fehler wieder... versuche das mal mit FileExist nun..
-
Wenn ich es richtig verstehe, ersetzt er die vorhandenen "\" durch "/" und nicht umgekehrt. Und danach kann dann FileExists die Datei auf gar keinen Fall mehr funktionieren. Sieht eher so aus als versuche er, den Filenamen im UNIX-Format zu übergeben...
Grüße
-
AAAAAAAAAAH endlich, ich habs rausgefunden
.. Durch die Funktion FileExists .. der Fehler lag anscheinend dadrin das, als der den Pfad mit Dialog ausgelesen hat nur einen backslash hat und der dadurch Probleme bekommt, hab nun aus einem backslash zwei gemacht und nun gehts
-
Also bei mir sind im Pfad die Backslashes korrekt enthalten. Sowohl in dem AnsiStrig, als auch in einem konvertiertern char*. Sehr seltsam.
-
Joe_M. schrieb:
(...)Sehr seltsam.
Kommt mir auch komisch vor...
Gruß,
Alexander