barti2287 Temat założony przez niniejszego użytkownika |
[C++][WinApi] Odczytywanie danych z pliku - działa tylko z poziomu aplikacji » 2014-05-21 22:21:47 Witam,
Mam problem. W moim programi potrzebuję umieścić możliwość zapisywania i odczytywania danych z pliku. Wszystko działa bardzo dobrze, dopóki otwieram plik korzystając z mojego programu (Plik --> Otwórz). Jeśli próbuję otworzyć plik txt za pomocą mojego programu, który jest czymś w stylu notatnika, otwiera mi się mój program bez załadowanej treści.
W razie potrzeby mogę przesłać fragmenty kodu.
Proszę o w miarę możliwości szybką pomoc. |
|
MrPoxipol |
» 2014-05-21 23:26:31 Code or it didn't happen. |
|
barti2287 Temat założony przez niniejszego użytkownika |
Kod - odczyt pliku » 2014-05-22 07:00:51 W poniższym kodzie znajduje się odczyt pliku. if( LOWORD( wParam ) == 101 ) { OPENFILENAME ofn; char n[ MAX_PATH ] = ""; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki tekstowe (*.txt)\0*.txt\0Wszystkie pliki\0*.*\0"; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = n; ofn.lpstrDefExt = "txt"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if( !GetOpenFileName( & ofn ) ) { MessageBox( NULL, "Wystąpił błąd podczas ustalania ścieżki pliku! Program zostanie automatycznie zamknięty.", "Błąd!", MB_ICONERROR | MB_OK ); PostQuitMessage( 0 ); } plk = CreateFile( n, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if( plk == INVALID_HANDLE_VALUE ) { MessageBox( NULL, "Nie można otworzyć pliku. Program zostanie automatycznie zamknięty.", "Błąd!", MB_ICONERROR | MB_OK ); PostQuitMessage( 0 ); } roz = GetFileSize( plk, NULL ); if( roz == 0xFFFFFFFF ) { MessageBox( NULL, "Nieprawidłowy rozmiar pliku! Program zostanie automatycznie zamknięty.", "Błąd!", MB_ICONERROR | MB_OK ); PostQuitMessage( 0 ); } tk =( LPSTR ) GlobalAlloc( GPTR, roz + 1 ); if( tk == NULL ) { MessageBox( NULL, "Za mało pamięci! Program zostanie automatycznie zamknięty.", "Błąd!", MB_ICONERROR | MB_OK ); PostQuitMessage( 0 ); } if( !ReadFile( plk, tk, roz, & pct, NULL ) ) { MessageBox( NULL, "Wystąpił błąd podczas odczytywania pliku! Program zostanie automatycznie zamknięty.", "Błąd!", MB_ICONERROR | MB_OK ); PostQuitMessage( 0 ); } tk[ roz ] = 0; SetWindowText( pt, tk ); GlobalFree( tk ); CloseHandle( plk ); }
break; }
|
|
DejaVu |
» 2014-05-26 11:05:51 |
|
DejaVu |
» 2014-05-26 11:08:17 Wszystko działa bardzo dobrze, dopóki otwieram plik korzystając z mojego programu (Plik --> Otwórz). Jeśli próbuję otworzyć plik txt za pomocą mojego programu, który jest czymś w stylu notatnika, otwiera mi się mój program bez załadowanej treści. |
Zdefiniuj problem. Z Twojego opisu nic nie wynika. |
|
libed |
» 2014-05-27 11:56:10 Sprawdz rezultat funkcji SetWindowText albo uzyj WM_SETTEXT |
|
barti2287 Temat założony przez niniejszego użytkownika |
» 2014-05-28 16:08:57 Przepraszam, jeśli wyraziłem się niejasno.
Chodzi mi o to, że działa jeśli otworzę najpierw mój program, a potem plik używając "Plik --> Otwórz".
Nie działa, kiedy mój program jest zamknięty, a ja kliknę PPM na zapisanym wcześniej pliku i wybiorę opcję "Otwórz za pomocą --> Wybierz program domyślny --> nazwaprogramu.exe. |
|
Monika90 |
» 2014-05-28 16:22:54 Myślałeś, że to samo się zrobi? Musisz to oprogramować. Nazwa pliku do otwarcia jest przekazywana jako argument wiersza poleceń (3 parametr funkcji WinMain). |
|
« 1 » 2 |