krdk Temat założony przez niniejszego użytkownika |
[winAPI] Zapis pliku. » 2009-06-22 11:46:58 Skopiowałem sobie kod źródłowy ze strony darkcult.org :, LPSTR Bufor; DWORD dwRozmiar, dwZapisane; HANDLE hPlik;
hPlik = CreateFile( "test.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL ); if( hPlik == INVALID_HANDLE_VALUE ) { MessageBox( NULL, "Nie można otworzyć pliku.", "A to pech!", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
dwRozmiar = GetWindowTextLength( hwnd ); if( dwRozmiar == 0 ) { MessageBox( NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 ); if( Bufor == NULL ) { MessageBox( NULL, "Za mało pamięci!", "Ale wiocha...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
GetWindowText( hwnd, Bufor, dwRozmiar ); Bufor[ dwRozmiar ] = 0;
if( !WriteFile( hPlik, Bufor, dwRozmiar, & dwZapisane, NULL ) ) { MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
GlobalFree( Bufor ); CloseHandle( hPlik );
ale do pliku zapisywała się nazwa okienka (:P) więc zmieniłem w funkcjach GetWindowTextLength i GetWindowText hwnd na hText(nazwa mojej kontrolki tekstowej), lecz wtedy wyświetlał mi się błąd: "Nieprawidłowy rozmiar pliku!". Więc dodałem przed deklaracjami zmiennych : SetWindowText( hTekst, "1" ); Program się prawidłowo uruchomił, lecz po wpisaniu tekstu do kontrolki nie zapisuje się ona do pliku. Mój aktualny kod to: hText = CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 30, 30, 400, 500, hwnd, NULL, hInstance, NULL );
SetWindowText( hText, "1" );
LPSTR Bufor; DWORD dwRozmiar, dwZapisane; HANDLE hPlik;
hPlik = CreateFile( "tekst.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL ); if( hPlik == INVALID_HANDLE_VALUE ) { MessageBox( NULL, "Nie można otworzyć pliku.", "A to pech!", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
dwRozmiar = GetWindowTextLength( hText ); if( dwRozmiar == 0 ) { MessageBox( NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 ); if( Bufor == NULL ) { MessageBox( NULL, "Za mało pamięci!", "Ale wiocha...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
GetWindowText( hText, Bufor, dwRozmiar ); Bufor[ dwRozmiar ] = 0;
if( !WriteFile( hPlik, Bufor, dwRozmiar, & dwZapisane, NULL ) ) { MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); }
GlobalFree( Bufor ); CloseHandle( hPlik );
Moje pytanie to: czemu się nie zapisuje?!? |
|
pixelmaster |
» 2009-06-22 13:10:20 |
|
krdk Temat założony przez niniejszego użytkownika |
» 2009-06-22 17:25:49 Szukałem już wcześniej, ale dałem długie słowo kluczowe i mi nie znalazło. Ale dalej mi nie działa. Mam kod wg. tamtego przykładu, program się uruchamia lecz tekst nie zapisuje się do pliku.
|
|
pixelmaster |
» 2009-06-22 17:29:27 pokaż cały kod |
|
krdk Temat założony przez niniejszego użytkownika |
» 2009-06-22 21:32:54 #include <windows.h>
HWND hwnd; HWND hOknoText;
LPSTR NazwaKlasy = "Nazwa"; MSG Komunikat;
bool ZapiszPlik( LPSTR sNazwaPliku, HWND hOknoText ) { LPSTR Bufor; DWORD dwRozmiar, dwZapisane; HANDLE hPlikz; bool udalo_sie = false; hPlikz = CreateFile( sNazwaPliku, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); if( hPlikz != INVALID_HANDLE_VALUE ) { dwRozmiar = GetWindowTextLength( hOknoText ); if( dwRozmiar == 0xFFFFFFFF ) { MessageBox( NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); } Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 ); if( Bufor == NULL ) { MessageBox( NULL, "Za mało pamięci!", "Ale wiocha...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); } GetWindowText( hOknoText, Bufor, dwRozmiar + 1 ); if( !WriteFile( hPlikz, Bufor, dwRozmiar, & dwZapisane, NULL ) ) { MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); } GlobalFree( Bufor ); CloseHandle( hPlikz ); } return udalo_sie; }
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wce; wce.cbSize = sizeof( WNDCLASSEX ); wce.style = CS_DBLCLKS; wce.lpfnWndProc = WndProc; wce.hInstance = hInstance; wce.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wce.hCursor = LoadCursor( NULL, IDC_ARROW ); wce.hbrBackground =( HBRUSH )( COLOR_WINDOW + 11 ); wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpszClassName = NazwaKlasy; wce.lpszMenuName = 0; wce.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wce ) ) { MessageBox( NULL, "Nie da się stworzyć klasy", "Error", MB_OK | MB_ICONERROR ); return 1; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Okienko", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 470, 600, NULL, NULL, hInstance, NULL ); hOknoText = CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 30, 30, 400, 500, hwnd, NULL, hInstance, NULL ); if( hwnd == NULL ) { MessageBox( NULL, "Nie da się stworzyć okna", "Error", MB_OK | MB_ICONERROR ); return 1; } OPENFILENAME ofn; char sNazwaPliku[ MAX_PATH ] = ""; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki tekstowe (*.txt)\0*.txt\0Pliki PHP (*.php;*.php3;*.phtml)\0*.php;*.php3;*.phtml\0Wszystkie pliki\0*.*\0"; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = sNazwaPliku; ofn.lpstrDefExt = "txt"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if( GetSaveFileName( & ofn ) ) { ZapiszPlik( sNazwaPliku, hOknoText ); } ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; } LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; } Nie wiem co robię źle. Z odczytem nie miałem problemów. W bibliotece fstream też mi zapis nie wychodził, ale nie chciało mi się już wtedy kombinować z tym. |
|
pixelmaster |
» 2009-06-22 21:37:58 zrób sobie buttona a potem w wm_command jak button kliknięty zrób to OPENFILENAME ofn; char sNazwaPliku[ MAX_PATH ] = "";
ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki tekstowe (*.txt)\0*.txt\0Pliki PHP ( *.php; *.php3; *.phtml ) \0*.php; *.php3; *.phtml\0Wszystkie pliki\0 *.*\0 "; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = sNazwaPliku; ofn.lpstrDefExt = "txt"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if( GetSaveFileName( & ofn ) ) { ZapiszPlik( sNazwaPliku, hOknoText ); } |
|
krdk Temat założony przez niniejszego użytkownika |
» 2009-06-23 13:19:45 Teraz działa :):):) Wielkie dzięki. |
|
« 1 » |