[WinAPI, C++] GetOpenFileName - jak odczytać wszystkie wybrane pliku?
Ostatnio zmodyfikowano 2011-08-26 15:33
Dawidsoni Temat założony przez niniejszego użytkownika |
[WinAPI, C++] GetOpenFileName - jak odczytać wszystkie wybrane pliku? » 2011-08-26 11:32:27 Witam. Skoro to nie ma nic wspólnego z ostatnim tematem i został on zamknięty to zakładam nowy temat. Mam 1 pytanie. Jak mogę poznać nazwy plików wczytanych w oknie dialogowym? Robię tak: ofn.lpstrFile = sNazwaPliku;
Jak mam 1 plik wczytany wszystko jest dobrze (nie mam flagi OFN_ALLOWMULTISELECT). Zmienna = ścieżce do pliku. Jednak jak mam kilka plików to zmienna wygląda tak: C:\Users\Samsung\Documents, czyli jest to folder, w którym są nazwy plików, które wybrałem. A skąd mogę poznać nazwy wybranych plików? |
|
DejaVu |
» 2011-08-26 12:19:21 Czytałeś dokumentację?
/edit:
Google:
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/828d548e-2c9b-460f-8138-339e2d557878
/ Create dialog to open multiple files. CFileDialog dlg( TRUE, _T( "txt" ), _T( "*.txt" ), OFN_ALLOWMULTISELECT );
const DWORD numberOfFileNames = 100; const DWORD fileNameMaxLength = MAX_PATH + 1; const DWORD bufferSize =( numberOfFileNames * fileNameMaxLength ) + 1; TCHAR * filenamesBuffer = new TCHAR[ bufferSize ];
filenamesBuffer[ 0 ] = NULL; filenamesBuffer[ bufferSize - 1 ] = NULL;
dlg.m_ofn.lpstrFile = filenamesBuffer; dlg.m_ofn.nMaxFile = bufferSize;
CString fileNameArray[ numberOfFileNames ]; if( dlg.DoModal() == IDOK ) { POSITION fileNamesPosition = dlg.GetStartPosition(); int iCtr = 0; while( fileNamesPosition != NULL ) { fileNameArray[ iCtr ] = dlg.GetNextPathName( fileNamesPosition ); iCtr++; } }
delete[] filenamesBuffer; |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-08-26 15:33:27 Nie znam tak dobrze angielskiego, żeby wszystko zrozumieć co tam pisze, ale zrozumiałem, że po każdej nazwie pliku jest NULL. Tak naprawdę pliki zapisywały się: C/Documents/Folder (NULL) nazwa 1.png (NULL) nazwa 2.png (NULL) ... , czyli zapisywały się dobrze, ale ja nie wiedziałem, że tak się zapisują, bo ładowałem to do stringa, a potem wypisywałem na ekranie. Oczywiście string kończy się NULLem i na ekranie było wypisywane: C/Documents/Folder Myślałem, że to jest cała zmienna i stąd mój błąd. Napisałem sobie funkcję, która mi robi ścieżki, zwraca ich adres oraz pokazuje ile zostało wpisanych ścieżek: string * zmien( char FileName[], int & ile ) { int ile_sciezek = 0; int i = 0; for( int j = 1;; j++ ) { string m = ""; while( FileName[ i ] != '\0' ) { m += FileName[ i ]; i++; } i++; if( m == "" || m == " " ) { ile_sciezek = j - 2; break; } } if( !ile_sciezek ) ile_sciezek++; i = 0; string m = ""; string * wsk_sciezki = new string[ ile_sciezek ]; while( FileName[ i ] != '\0' ) { m += FileName[ i ]; i++; } i++; for( int ii = 0; ii < ile_sciezek; ii++ ) { while( FileName[ i ] != '\0' ) { *( wsk_sciezki + ii ) += FileName[ i ]; i++; } i++; string pomocnik = *( wsk_sciezki + ii ); if( pomocnik == "" || pomocnik == " " ) { break; } ( wsk_sciezki + ii )->clear(); *( wsk_sciezki + ii ) = m + "\\" + pomocnik; } ile = ile_sciezek; return wsk_sciezki; } Wystarczyło napisać, że jest NULL po każdej nazwie:D. Dzięki Dejavu za linka. |
|
« 1 » |