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

Zapisywanie do pliku Windows API

Ostatnio zmodyfikowano 2009-03-31 20:26
Autor Wiadomość
Bombasarkadian
Temat założony przez niniejszego użytkownika
Zapisywanie do pliku Windows API
» 2009-03-31 19:48:10
Witam,
Na wstępie przepraszam, że tak często męczę, ale jakoś ciężko mi to WinAPI przychodzi.
Mam taki kod jak [url href="http://wklej.org/hash/1e1d1c813f/" nazwa="TUTAJ"/].
Problem jest przy zapisywaniu do pliku.
Na moją logikę wszystko powinno działać, ale plik po zapisaniu jest pusty.
Otwieranie działa bezproblemowo, a zapisywanie nie.

Gdzie robię błąd?
P-5202
pekfos
» 2009-03-31 20:05:16
C/C++
hFile = CreateFile( sNazwaPliku,
GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, 0 );
zamień
C/C++
hFile = CreateFile( sNazwaPliku,
GENERIC_WRITE, 0, NULL, CREATE_ALLWAYS, 0, 0 );
jakoś tak jak nie będzie działać to sprawdź ALLWAYS_CREATE
(dawno sie w to nie bawiłem:D) do zapisu lepiej tego używać

//edit:
a gdzie GetWindowText()??

fajne.. plik był pusty bo bufor był pusty
P-5204
Bombasarkadian
Temat założony przez niniejszego użytkownika
» 2009-03-31 20:08:43
CREATE_ALWAYS to raczej zamiast CREATE_NEW.
Ale plik się tworzy, tylko, że jest pusty pomimo iż hEdit ma tekst.
P-5205
pixelmaster
» 2009-03-31 20:12:07
Ja robię u siebie
C/C++
// hOknoText tam jest to co chce zapisać
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 == 0 )
        {
            MessageBox( NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION );
            PostQuitMessage( 0 ); //Zakończ program
        }
       
        Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 );
        if( Bufor == NULL )
        {
            MessageBox( NULL, "Za mało pamięci!", "Ale wiocha...", MB_ICONEXCLAMATION );
            PostQuitMessage( 0 ); //Zakończ program
        }
        GetWindowText( hOknoText, Bufor, dwRozmiar + 1 ); //skopiuj do bufora tekst z jakiegoś okna
       
        if( !WriteFile( hPlikz, Bufor, dwRozmiar, & dwZapisane, NULL ) )
        {
            MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION );
            PostQuitMessage( 0 ); //Zakończ program
        }
       
        GlobalFree( Bufor ); //Zwolnij bufor
        CloseHandle( hPlikz ); //Zamknij plik            
    }
    return udalo_sie;
}

i wybieranie miejsca zapisania
C/C++
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 );
}
P-5206
Bombasarkadian
Temat założony przez niniejszego użytkownika
» 2009-03-31 20:26:53
Dzięki pixelmaster, twój sposób działa.
P-5208
« 1 »
  Strona 1 z 1