Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML i WinApi] Błąd z otworzeniem pliku ze ścieżki zwróconej przez GetOpenFileName ()

Ostatnio zmodyfikowano 2013-12-21 15:35
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML i WinApi] Błąd z otworzeniem pliku ze ścieżki zwróconej przez GetOpenFileName ()
» 2013-12-21 14:54:59
Witam, GetOpenFileName () zwraca mi do char szFile ścieżkę bezwzględną do danego pliku który chce odtworzyć. Ścieżka wymaga jednak zamiany "\\" na "/" bo "\" jest znakiem specjalnym. Po zamianie ścieżki próbując odtworzyć plik nie uda się to. Mimo to ścieżka jest dobra, bo kopiując ją do innego programu muzyka się odtwarza bez problemu. Mój kod aplikacji głównej (potrzebna część) :
C/C++
if( browse.inRectangle( posMouse ) == true && browse.isMouseKeyDown( zdarzenie ) == true )
{
    plik.open( "konsolka.txt" ); // W subsystem Windows nie ma konsoli to stworzyłem swoją do sprawdzania ścieżki
    OPENFILENAME ofn; // common dialog box structure
    char szFile[ 260 ]; // buffer for file name
    // owner window
    HANDLE hf; // file handle
   
    // Initialize OPENFILENAME
    ZeroMemory( & ofn, sizeof( ofn ) );
    ofn.lStructSize = sizeof( ofn );
    ofn.hwndOwner = hwnd;
    ofn.lpstrFile = szFile;
    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
    // use the contents of szFile to initialize itself.
    ofn.lpstrFile[ 0 ] = '\0';
    ofn.nMaxFile = sizeof( szFile );
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
   
    // Display the Open dialog box.
   
    if( GetOpenFileName( & ofn ) == TRUE )
    hf = CreateFile( ofn.lpstrFile,
    GENERIC_READ,
    0,
    ( LPSECURITY_ATTRIBUTES ) NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
        ( HANDLE ) NULL );
   
    string sciezka = szFile; // niejawna konwersja
    plik << "Przed zamiana " << sciezka << endl; // W konsolce (plik txt.) jest tak : E:\INFORMATYKA\Ćwiczenia C++\Programowanie Sieciowe\Mp3 Player\Mp3 Player\Mp3 Player\muza.ogg
   
    if( sciezka.find( "\\" ) ) // jeżeli znajdzie pojedyńczy "\"
    {
        plik << "Zamienia sie" << endl;
        replaceAll( sciezka, "\\", "/" ); // to zamień na "/"
    }
    plik << "Po zamianie : " << sciezka << endl; // w konsolce : E:/INFORMATYKA/Ćwiczenia C++/Programowanie Sieciowe/Mp3 Player/Mp3 Player/Mp3 Player/muza.ogg
    if( !music.openFromFile( sciezka ) )
    {
        return - 1; // wychodzi z programu
    }
    music.play();
   
    plik.close();
   
}
Kod aplikacji pomocniczej w której ta sama ścieżka się odtwarza :
C/C++
int _tmain( int argc, _TCHAR * argv[] )
{
    sf::Event zdarzenie;
    sf::RenderWindow okno( sf::VideoMode( 100, 100, 32 ), "cos tam", sf::Style::Default );
    std::ofstream plik;
    string slash_one = "\\";
   
    std::string sciezka = "E:/INFORMATYKA/Ćwiczenia C++/Programowanie Sieciowe/Mp3 Player/Mp3 Player/Mp3 Player/muza.ogg"; // ścieżka z pierwszego programu
    cout << sciezka << endl; // E:/INFORMATYKA/Ćwiczenia C++/Programowanie Sieciowe/Mp3 Player/Mp3 Player/Mp3 Player/muza.ogg
    sf::Music muzyczka;
    if( !muzyczka.openFromFile( sciezka ) )
    {
        cout << "nie udalo sie wczytac" << endl;
    }
    muzyczka.play(); // Oddtawarza się bez problemu
    while( okno.isOpen() )
    {
        while( okno.pollEvent( zdarzenie ) )
        {
           
        }
    }
    system( "pause" );
    return 0;
}
P-99727
pekfos
» 2013-12-21 14:59:55
Ścieżka wymaga jednak zamiany "\\" na "\\\\" bo "\" jest znakiem specjalnym.
Nieprawda.
P-99729
domin568
Temat założony przez niniejszego użytkownika
» 2013-12-21 15:05:50
No to w takim razie bez zmieniania również mi się nie odtworzy plik.
P-99730
pekfos
» 2013-12-21 15:23:32
C/C++
hf = CreateFile( ofn.lpstrFile,
GENERIC_READ,
0,
( LPSECURITY_ATTRIBUTES ) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
( HANDLE ) NULL );
Wywal to.
P-99732
domin568
Temat założony przez niniejszego użytkownika
» 2013-12-21 15:30:51
Teraz działa, wielkie dzięki :) , ale dlaczego to blokowało ? Microsoft w przykładzie miał coś źle :D ??
P-99733
pekfos
» 2013-12-21 15:35:19
To ty źle przepisałeś przykład.
P-99736
« 1 »
  Strona 1 z 1