[SFML i WinApi] Błąd z otworzeniem pliku ze ścieżki zwróconej przez GetOpenFileName ()
Ostatnio zmodyfikowano 2013-12-21 15:35
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ęść) : if( browse.inRectangle( posMouse ) == true && browse.isMouseKeyDown( zdarzenie ) == true ) { plik.open( "konsolka.txt" ); OPENFILENAME ofn; char szFile[ 260 ]; HANDLE hf; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = hwnd; ofn.lpstrFile = szFile; 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; if( GetOpenFileName( & ofn ) == TRUE ) hf = CreateFile( ofn.lpstrFile, GENERIC_READ, 0, ( LPSECURITY_ATTRIBUTES ) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, ( HANDLE ) NULL ); string sciezka = szFile; plik << "Przed zamiana " << sciezka << endl; if( sciezka.find( "\\" ) ) { plik << "Zamienia sie" << endl; replaceAll( sciezka, "\\", "/" ); } plik << "Po zamianie : " << sciezka << endl; if( !music.openFromFile( sciezka ) ) { return - 1; } music.play(); plik.close(); }
Kod aplikacji pomocniczej w której ta sama ścieżka się odtwarza : 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"; cout << sciezka << endl; sf::Music muzyczka; if( !muzyczka.openFromFile( sciezka ) ) { cout << "nie udalo sie wczytac" << endl; } muzyczka.play(); while( okno.isOpen() ) { while( okno.pollEvent( zdarzenie ) ) { } } system( "pause" ); return 0; } |
|
pekfos |
» 2013-12-21 14:59:55 Ścieżka wymaga jednak zamiany "\\" na "\\\\" bo "\" jest znakiem specjalnym. |
Nieprawda. |
|
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. |
|
pekfos |
» 2013-12-21 15:23:32 hf = CreateFile( ofn.lpstrFile, GENERIC_READ, 0, ( LPSECURITY_ATTRIBUTES ) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, ( HANDLE ) NULL );
Wywal to. |
|
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 ?? |
|
pekfos |
» 2013-12-21 15:35:19 To ty źle przepisałeś przykład. |
|
« 1 » |