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 aussehen

    CString 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


Log in to reply