[ Pobierz całość w formacie PDF ]
.Deklaracja funkcji WriteFile() przedstawia siê nastêpuj¹co:BOOL WriteFile(HANDLE hFile, // uchwyt zapisywanego plikuLPCVOID lpBuffer, // adres bufora Ÿród³owegoDWORD nNumberOfBytesToWrite, // liczba bajtów do zapisaniaLPDWORD lpNumberOfBytesWritten, // adres liczby zapisanych bajtówLPOVERLAPPED lpOverlapped // adres struktury danych// dla dostêpu asynchronicznego);Podobnie jak poprzednio, parametr hFile jest uchwytem pliku, do któregozapisujemy dane, zaœ lpBuffer – adresem bufora, który je zawiera.WartoœænNumberOfBytesToWrite okreœla liczbê bajtów, które nale¿y zapisaæ w pliku, zaœlpNumberOfBytesWritten to adres zmiennej, w której zostanie umieszczona liczbafaktycznie zapisanych bajtów.Parametr lpOverlapped to znany nam ju¿ wskaŸnikdo struktury typu OVERLAPPED, wykorzystywanej w przypadku otwarcia pliku wtrybie asynchronicznym.Funkcja WriteFile() zwraca wartoœæ TRUE w przypadku pomyœlnego wykonaniazapisu; w przeciwnym razie zwracana jest wartoœæ FALSE.Przedstawimy teraz krótki przyk³ad, demonstruj¹cy zapisywanie i odczytywaniedanych z pliku.Po uruchomieniu IDE i utworzeniu nowej aplikacji trzebaumieœciæ na g³Ã³wnym formularzu nastêpuj¹ce elementy [5 Dla unikniêcianieporozumieñ wartoœci w³aœciwoœci typu ³añcuchowego ujêto w apostrofy (jak mato miejsce w plikach definicji formularzy).Komponenty, których nazwy nale¿yzmieniæ, figuruj¹ w lewej kolumnie pod swoimi pierwotnymi (domyœlnymi) nazwami– przyp.t³um.]:Tabela 14.16.Komponenty g³Ã³wnego formularza programu do zapisu i odczytu plikuKomponentW³aœciwoœciForm1Left = 235Top = 184Label1Left = 9Top = 9Width = 119Height = 13Caption = 'Nazwa tworzonego pliku:'Label2Left = 8Top = 130Width = 211Height = 39Caption = 'Klikniêcie TWÓRZ zapisze zawartoœæ bufora i wyœwietli j¹ w poluponi¿ej.Klikniêcie CZYTAJ odczyta zawartoœæ utworzonego pliku i wyœwietlij¹.'WordWrap = TrueLabel5Name = BufferLabelLeft = 8Top = 205Width = 25Height = 13Caption = 'Bufor'Label3Left = 6Top = 186Width = 88Height = 13Caption = 'Dane w buforze.'Label4Left = 10Top = 56Width = 123Height = 13Caption = 'Tekst zapisywany w pliku:'Edit1Left = 7Top = 25Width = 265Height = 21Text = 'c:\test.txt'Button1Left = 13Top = 98Width = 75Height = 25Caption = '&Twórz'Button2Left = 200Top = 98Width = 75Height = 25Caption = '&Czytaj'Edit2Left = 8Top = 72Width=265MaxLength = 255Text = 'To ja, tekst przyk³adowy'Tak utworzony projekt trzeba zapisaæ pod nazw¹ readwrite.Modu³owi formularzanale¿y nadaæ nazwê mainform.cpp i wstawiæ do niego nastêpuj¹ce definicje:Wydruk 14.4.Przyk³ady u¿ycia funkcji: CreateFile(), WriteFile() i ReadFile()#include#include#pragma hdrstop#include "mainform.h"//---------------------------------------------------------------------------#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------HANDLE hSrc;__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){char buffer[255];DWORD bytes_written;DWORD bytes_read;hSrc = CreateFile(Edit1->Text.c_str(), GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0);if(hSrc == INVALID_HANDLE_VALUE){Application->MessageBoxA("B³¹d otwarcia pliku!", NULL, NULL);return;}strcpy(buffer, Edit2->Text.c_str());WriteFile(hSrc, buffer, strlen(buffer), &bytes_written, NULL);CloseHandle(hSrc);BufferLabel->Caption = buffer;}//---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){BufferLabel->Caption = "";char Buffer[256];DWORD dwRead;hSrc = CreateFile(Edit1->Text.c_str(), GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);if(hSrc == INVALID_HANDLE_VALUE){Application->MessageBoxA("B³¹d otwarcia pliku!", NULL, NULL);return;}if(ReadFile(hSrc, Buffer, 255, &dwRead, NULL) ){Buffer[dwRead] = 0;BufferLabel->Caption = Buffer;ShowMessage("Odczyt OK");}else{ ShowMessage("B³¹d odczytu"); }CloseHandle(hSrc);}Istotnym elementem powy¿szego kodu jest zmienna hSrc (typu HANDLE),przechowuj¹ca uchwyt pliku.Funkcje obs³ugi zdarzeñ, Button1Click() iButton2Click(), mo¿na wygenerowaæ automatycznie, klikaj¹c dwukrotnie obaprzyciski, co spowoduje samoczynne wpisanie odpowiedniego kodu do plikuŸród³owego i nag³Ã³wkowego modu³u (przepisuj¹c kod „rêcznie” nale¿y wstawiædeklaracje funkcji Button1Click() i Button2Click() do sekcji __publisheddeklaracji klasy TForm1 w pliku mainform.h – przyp.t³um.).Skompilowanie i uruchomienie naszego program powinno udowodniæ, ¿e zapisywaniei odczytywanie danych z pliku nie jest ¿adn¹ filozofi¹.Interfejs Win32 udostêpnia programistom znacznie wiêcej funkcji obs³uguj¹cychmanipulowanie plikami.Warto tu wspomnieæ m.in.o funkcjach MoveFile(),DeleteFile() oraz nowych funkcjach pow³oki (zwanych skrótowo „SHx”),wprowadzonych w systemach Windows 95 oraz NT 4.Na pocz¹tek zajmiemy siêstarszymi rozwi¹zaniami; w dalszej kolejnoœci zaprezentujemy nowe funkcjepow³oki realizuj¹ce zbli¿one zadania.MoveFile()Jak mo¿na siê domyœlaæ, funkcja MoveFile() pozwala na przenoszenie plików lubkatalogów w obrêbie woluminu [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • listy-do-eda.opx.pl