Klasa TFileStream PDF Drukuj Email
Wpisał doctor   
Piątek, 26. Styczeń 2007 10:59
Klasa TFileStream

Klasa ta jest często wykorzystywana do obsługi plików binarnych. Stosuje się ją zamiast przestarzałych funkcji z biblioteki iostream.h.
Obsługa tej klasy jest bardzo prosta. Pamiętać jedynie należy, że dostać się do pliku można jak do tablicy.
Tj. należy ustawić indeks na start (od tego miejsca będziemy czytać/zapisywać). Potem należy odczytać/zapisać określoną liczbę bajtów.
{viewonly=registered}
Utworzenie obiektu klasy TFileStream
TFileStream *Plik = new TFileStream("nazwa_pliku", tryb_otwarcia);

tryb_otwarcia określa, czy plik ma być do odczytu, do zapisu, czy ma być utworzony jeżeli nie istnieje.

Możliwe są następujące tryby otwarcia:
fmOpenRead - otwarcie tylko z prawami do odczytu pliku
fmOpenReadWrite - otwarcie do zapisu i odczytu
fmOpenWrite - tylko dla zapisu
fmCreate - plik jest tworzony, nawet jak istnieje - wtedy jego zawartość jest czyszczona
fmShareCompat - nie zalecane dla wieloplatformowych aplikacji
fmShareExclusive - bez prawa do odczytu i zapisu przez inne procesy
fmShareDenyWrite - bez prawa do zapisu przez inne procesy
fmShareDenyRead - bez prawa do odczytu przez inne procesy
fmShareDenyNone - pełny dostęp dla innych procesów

Metody skojarzone z klasą TFileStream:
Seek(offset, od_jakiego_miejsca) - ustawia wskaĽnik pliku
Read(void *, ilosc_bajtów_do_odczytu) - do odczytu
Write(void *, ilosc_bajtów_do_zapisu) - do zapisu

parametr od_jakiego miejsca najczęściej przyjmuje wartość
soFromBeginning - od początku pliku.

Jeśli obiekt klasy TFIleStream jest tworzony dynamicznie (a więc przez wskaĽnik), należy pamiętać nie tylko o usunięciu wskaĽnika po skończonej operacji operatorem delete, ale także o zwolnieniu zasobów za pomocą funkcji Free().Powyższa uwaga jest bardzo ważna.Może się zdarzyć, że będziemy korzystać w programie kilka razy z tego samego pliku.Jeśli po każdej operacji nie zwolnimy zasobów za pomocą funkcji Free(), to ujrzymy komunikat 'Cannont open file ...'.Jest to pokazane na poniższym przykładzie.Niestosowanie tej praktyki może prowadzić do błędów współdzielenia plików, wycieku pamięci itd.

Przykład
Zapis liczb z przedziału od 0 do 255 do plilu

TFileStream *str = new TFileStream("zapis.txt", fmCreate);

char *buf;

for(int i=0;i<256;i++)

{

str->Seek(i, soFromBeginning);

buf = (char*)i;

str->Write(&buf, 1); //zapis 1B

}

str->Free();
delete str; 

Odczyt zawartości pliku "zapis.txt"

 if(FileExists("zapis.txt"))
{ //sprawdzenie czy plik istnieje
TFileStream *str2 = new TFileStream("zapis.txt", fmOpenRead);
int rozmiar_pliku = str2->Size; // w B
unsigned char buf;
for(int i=0;i<rozmiar_pliku;i++)
{
str2->Seek(i, soFromBeginning);
str2->Read(&buf, 1); // odczyt 1B
Chart1->Series[0]->AddY(buf);
}
}

Klasa obsługuje pliki o rozmiarze 2^64 bajtów.{/viewonly}
Komentarze
Dodaj nowy Szukaj
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

LAST_UPDATED2
 
 

Losowy obraz

b2.jpg

Gościmy

Naszą witrynę przegląda teraz 21 gości 




Apteka Internetowa | budynki gospodarcze | promocje avans | pudła tekturowe | Studnie