Sound mit MCI - Probleme bei Leerzeichen im Pfad
-
Hallo,
ich möchte in meinem Programm Sounds wiedergeben. In den MFC-FAQ hab ich das Thema MP3's abspielen gefunden. Dort wird der Sound mittels MediaPlayer Control wiedergegeben.
Nachdem ich stundenlang schon beim ersten Kommando, für das Öffnen des Players, hängengeblieben bin, ist mir jetzt aufgefallen, dass sich in der Pfadangabe ein Leerzeichen befand. Ohne Leerzeichen klappt alles.
Beispiel:
CString sPath; // Pfad zur Wave Datei lautet D:\MeineWaves\sound1.wav sPath = "D:\\MeineWaves\\sound1.wav" // klappt // Pfad zur Wave Datei lautet D:\Meine Waves\sound1.wav sPath = "D:\\Meine Waves\\sound1.wav" // klappt nicht
Der Code zum Öffnen des Players:
CString sCommand; sCommand = "open " +sPath+ " alias Player"; // Wurde von unixtom geändert // Wenn es nicht klappt 0 zurück if (mciSendString(sCommand,NULL,NULL,NULL)!=0) return 0;
Kann ich dieses Problem irgendwie lösen?
In URLs werden Leerzeichen durch '%20' ersetzt, ist das in C++ ähnlich?Übrigens lautet der originale sCommand-String
sCommand = "open " +sPath+ " alias Player shareable";
also mit 'shareable' am Ende, aber damit funktioniert es gar nicht.
Falls es wichtig ist, ich benutze VC++7 mit WinXP.Bin dankbar für jede Hilfe.
-
Hab mittlerweile die Funktion GetShortPathName() gefunden, die einen DOS konformen String erzeugt, damit klappt es.
Aber das Problem mit 'shareable' besteht immernoch.
-
sPath = "\"D:\\Meine Waves\\sound1.wav\"";
-
Danke!
Das ist natürlich noch einfacher und funktioniert auch.
Habs jetzt so gemacht, da ich den Pfad über einen FileDialog erhalte.sPath.Format("\"%s\"",sPath);
-
kirE schrieb:
Danke!
Das ist natürlich noch einfacher und funktioniert auch.
Habs jetzt so gemacht, da ich den Pfad über einen FileDialog erhalte.sPath.Format("\"%s\"",sPath);
hi, ich hab momentan das gleiche Problem und bin noch bei GetShortPathName() damits funktioniert. Leider kann ich mit der Codezeile nix anfangen. Hat jemand eine detailliertere version auf Lager?
Danke im Voraus,
Roman
-
Hallo Roman,
die Codezeile macht nichts anderes, als an Beginn und Ende des Pfades (welcher im CString sPath steht) Anführungszeichen zu setzen. Dadurch sind Leerzeichen im Pfad möglich.
Ausführlicher würde das so aussehenCString newPath; newPath = "\"" + sPath + "\"";
Gruß,
kirE
-
Hallo kirE,
danke, das machts um einiges klarer.
Seltsamerweise werden trotzdem keine Files abgespielt die in Pfaden mit Leerzeichen sind. Bei normalen funktionierts auch mit der Veränderung wie gewohnt.hier mein Code:
std::string pfadstring, pfadstring2; pfadstring= szFileName ; // szFileName -> Originalpfad zum File pfadstring2= "\"" + pfadstring + "\"";
Gruß
Roman
-
Ok, habs zum Laufen bekommen, war ein falscher Denkansatz meinerseits.
Ich würde in meinen Player gerne andere Funktionen als Play, Pause + Stop einbauen, kennt jemand ein gutes mci-Turtorial, die MSDN-Docu hierzu kommt mir recht kryptisch vor.
Wie auch immer, vielen Dank für Deine Hilfe kirE!
Gruß
Roman