background image

 

 

Wykład XXII i XXIII

Zapis i odczyt informacji w 

plikach

Podstawy informatyki
Semestr II Transport

background image

 

 

Wiadomości wstępne

Object Pascal posiada mechanizmy do komunikacji z 

pamięcią masową, dyskami, napędami optycznymi i 

dyskietkami, a także klawiatura, terminale, drukarki i 

ekran monitora. Są to zbiory danych obsługiwane 

za pomocą plików.

W stosowanym w Delphi Object Pascalu 

istnieją trzy rodzaje plików:

Tekstowe,
Zdefiniowane zwane także elementowymi,
Niezdefiniowane zwane także amorficznymi. 

background image

 

 

Schemat postępowania 

podczas wykonywania 

operacji plikowych

Określenie typu plikowego i opis 
zmiennej plikowej
Kojarzenie pliku z fizycznym „zbiorem” 
danych
Otwieranie pliku
Zapisywanie i dopisywanie elementów 
do pliku / Czytanie elementów z pliku
Zamykanie pliku

background image

 

 

Budowa plików 

tekstowych

Elementami plików tekstowych są 
wiersze podzielone na znaki.
Każdy wiersz zakończony jest parą 
znaków CR(carriage return) \ LF 
(line feed
)
Bezpośrednio po ostatnim wierszu 
występuje znak Ctrl-Z (znak końca 
pliku)

background image

 

 

Typ plikowy i opis 

zmiennej plikowej

W opisie pliku tekstowego 
wykorzystywany jest predefiniowany 
identyfikator typu 

Text

.

Przykład definicji pliku tekstowego

var FText;

background image

 

 

Kojarzenie zmiennej 

plikowej

ze zbiorem na dysku

 procedure AssignFile(var F; S: String);

F –identyfikator(nazwa) zmiennej plikowej
S –identyfikator fizycznego zbioru danych 

(ścieżka 

dostępu do zbioru lub identyfikator 

urządzenia)

Wywołanie procedury AssignFile może odbyć się 

jedynie w momencie, gdy zbiór jest zamknięty
Jeżeli jako nazwę zbioru podamy pusty łańcuch, to 

zmienna plikowa zostanie skojarzona ze standardowymi 

urządzeniami wejścia i wyjścia, czyli klawiaturą i 

monitorem (tylko dla aplikacji konsolowych)

background image

 

 

Identyfikatory fizycznych

zbiorów danych

LPT1, LPT2, LPT3

– drukarka

PRN

– synonim LPT1

COM1, COM2

– szeregowy port wejścia-

wyjścia
AUX

– synonim COM1

NUL

– urządzenie puste

CON

– konsola (klawiatura, ekran)

Ścieżka dostępu – określa fizyczny zbiór 
danych     na dysku stałym lub dyskietce

background image

 

 

Przykłady kojarzenia pliku

z fizycznym zbiorem 

danych

AssignFile(F, ‘LPT1’); 
{zmienna plikowa skojarzona z 
drukarką}

AssignFile(plik3, ’A:\ZBIOR3.TXT’); 
{zmienna plikowa skojarzona ze 
zbiorem na dyskietce A}

background image

 

 

Otwieranie pliku

Operacja otwarcia pliku ma na celu 

przygotowanie zmiennej plikowej do 

wprowadzania i/lub wyprowadzania 

poszczególnych elementów
Do otwierania plików tekstowych używamy w 

zależności od kierunku przesyłania danych 

jednej z trzech standardowych instrukcji:

– Rewrite(zmienna_ plikowa);
– Reset(zmienna_plikowa);
– Appened(zmienna_plikowa);

background image

 

 

Procedura Rewrite

procedure Rewrite(var F: Text);

Służy do tworzenia nowego fizycznego 
zbioru danych.
Jego nazwa musi być skojarzona z 
odpowiednią zmienną plikową za pomocą 
procedury AssignFile.
Za pomocą procedury Rewrite dokonujemy 
zapisu w nowo utworzonym zbiorze.  

background image

 

 

UWAGA !

Procedura Rewrite może mieć 
działanie destrukcyjne. 

Jeżeli istnieje zbiór o danej nazwie, 
zostanie on zniszczony, a w jego 
miejsce zostanie utworzony nowy, 
pusty zbiór.

background image

 

 

Procedura Reset

procedure Reset(var F: Text);

Służy do otwierania zbiorów do 
odczytu
Powoduje ona po otwarciu pliku 
ustawienie wskaźnika plikowego na 
początku pierwszej linii tekstu

background image

 

 

Procedura Append

procedure Append(var F: Text);

Może być stosowana jedynie dla 

plików tekstowych.
Powoduje po otwarciu pliku ustawienie 

wskaźnika na końcu zbioru.
Jest przeznaczona do dopisywania 

tekstów na końcu zbioru.

background image

 

 

Przykłady otwarcia pliku:

{...} AssignFile(plik3, ‘A:ZBIOR3.OUT’);

Rewrite(plik3);

{...} AssignFile(plik4, ‘C:\ZBIORY\ZBIOR4.OUT’);

Reset(plik4);

{...} AssignFile(plik5, ‘C:\ZBIORY\ZBIOR5.TXT’);

Append(plik5);

background image

 

 

Zapisywanie i 

dopisywanie

elementów do pliku

Do wprowadzania do pliku nowych elementów 
służą procedury:
procedure Write([var F: Text;] P1[,P2,...,Pn ]);
procedure WriteLn([var F: Text;] 
P1[,P2,...,Pn ]);
Przykłady stosowania:
Write(F,’Ala ma kota’);
Writeln(F,’Franek ma ‘,X,’ lat’);

background image

 

 

Czytanie elementów z 

pliku

Do czytania elementów z pliku służą procedury:
procedure Read([var F: Text;] V1[, V2,...,Vn ]);
procedure Readln([var F: Text;] V1[, V2,...,Vn ]);
Przykłady stosowania
Read(F,S)
ReadLn(F,Tekst)
gdzie S i Tekst są zmiennymi, w których 
umieszczone zostaną odczytane dane

background image

 

 

Zamknięcie pliku

procedure CloseFile(var F);

Procedura przeznaczona jest  do 
zamknięcia pliku i skojarzonego z nim 
fizycznego zbioru danych
Przykład użycia

CloseFile(F);

background image

 

 

Pomocnicze funkcje 

logiczne 

w przetwarzaniu plików 

tekstowych

Do określenia czy osiągnięty został koniec zbioru 

służą:
function Eof [ (var F: Text) ]: Boolean;
function SeekEof [ (var F: Text) ]: Boolean;
Funkcje zwracają  wartość True gdy plik znajduje 

się w pozycji przed ostatnim znakiem zbioru (Ctrl-Z) 

lub gdy zbiór nie zawiera żadnych znaków
Funkcja SeekEof ignoruje znaki spacji, tabulacji 

oraz CR\LF występujące przed końcem zbioru
Przykład:

while not Eof(zmienna_plikowa) 

do {...}
{powtarzaj aż osiągniesz koniec pliku}

background image

 

 

Pomocnicze funkcje logiczne 

w przetwarzaniu plików 

tekstowych cd.

Do określenia czy osiągnięty został koniec linii służą:
function Eoln [(var F: Text) ]: Boolean;
function SeekEoln [ (var F: Text) ]: Boolean;
Funkcje dają wartość logiczną TRUE, gdy plik 

znajduje się w pozycji znaku końca wiersza (CR\LF)
Funkcja SeekEoln ignoruje znaki spacji i tabulacji 

występujące przed końcem wiersza
Przykład:

while not Eoln(zmienna_plikowa) 

do {...}
{powtarzaj do końca bieżącej linii}

background image

 

 

Przykład 1

Utworzyć plik Liczby skojarzony ze zbiorem 
liczby.txt i zapisać do niego wartości 
zmiennych a, b i c.

var Liczby: Text; a,b,c : Byte;
begin
  AssignFile(Liczby, ’Liczby.txt’); {skojarzenie zm. 

plikowej i zbioru}

  Rewrite (Liczby); {otwarcie pliku do zapisu}
  Write (Liczby, a,b,c); {zapisanie wartości a, b, c}
  CloseFile(Liczby); {zamknięcie pliku}
end.

background image

 

 

Przykład 2

Do istniejącego już pliku tekstowego Notatki 
skojarzonego ze zbiorem Tekst.txt dopisz na jego 
końcu nowy tekst.

var Notatki: Text;
begin
  AssignFile(Notatki, ‘Tekst.txt’); {skojarzenie zmiennej plikowej i 

zbioru}

  Append(Notatki) {otwarcie zbioru tekstowego}
  Writeln(Notatki, ‘Tak działa instrukcja Append...’); {zapisanie 

tekstu}

  Writeln(Notatki, ‘Append...Append...’); {zapisanie tekstu}
  CloseFile(Notatki); {zamknięcie zbioru}
end.

background image

 

 

Przykład 3

Odczytać zawartość 
pliku i wypisać ją na 
ekranie 

(w aplikacji 

konsolowej)

var F: Text; S: String;
begin
  AssignFile(F,’C:\plik.txt’);
  {$I-} Reset(F); {$I+}

 if IOResult=0 then 
   begin

while not Eof(F) do
  begin
    readln(F,S);    

writeln(S);

  end;
CloseFile(F);

   end;
end.

background image

 

 

Przykład 4

Odczytać zawartość 
pliku i wypisać ją na 
ekranie 

(aplikacja 

konsolowa)

var F: Text; C: Char;
begin
  AssignFile(F,’C:\plik.txt’);
  {$I-} Reset(F); {$I+}

  if IOResult=0 then 

begin
  while
 not Eof(F) do
    begin
       while not 
Eoln(F) do

    begin Read(F,C); 

Write(C)

  end;

       ReadLn(F);  

Writeln;

end;

  CloseFile(F);
end;
end.

background image

 

 

Budowa plików 

elementowych

Pliki elementowe 

numerowane są od 

zera. Tak więc n-ty 

element pliku będzie 

miał w rzeczywistości 

numer n-1
Jeden z elementów jest 

wybrany, jego pozycję 

określa wskaźnik 

elementu
Zapisu i odczytu 

można dokonywać do\z 

wybranego elementu

n-
1

n

 -

 

e

le

m

e

n

w

 w

 z

b

io

rz

e

...
...
...
...
...
...
...
...
3
2
1
0

wskaź
nik
eleme
ntu

background image

 

 

Przetwarzanie plików

Przy przetwarzaniu plików elementowych 

obowiązuje identyczny jak dla plików tekstowych 

schemat postępowania

1. Zdefiniowanie zmiennej plikowej (część 

opisowa programu)

2. Skojarzenie zmiennej plikowej z 

fizycznym zbiorem danych

3. Otwarcie zbioru
4. Zapis\Odczyt danych
5. Zamknięcie zbioru

background image

 

 

Opis typu elementowego 

plikowego

Plik elementowy

type

 identyfikator_pliku=file of 
opis_typu_elementów_pliku;

background image

 

 

Skojarzenie zmiennej plikowej z 

fizycznym zbiorem danych

AssignFile(identyfikator_pliku,wyrażenie_łańcucho

we);

identyfikator pliku  - dowolna zmienna plikowa
wyrażenie łańcuchowe  - identyfikator fizyczny 
zbiór danych 
procedurę stosujemy identycznie jak dla plików 
tekstowych
skojarzenie ze zbiorem fizycznym można 
zmieniać tylko wówczas gdy plik jest zamknięty

background image

 

 

Przykład stosowania

 procedury AssignFile

 

var plik: File of Double;
{...}
 AssignFile(plik, ‘A:\ZBIORY\ZBIOR2.DOC’);

zmienna plikowa plik reprezentująca plik o 
elementach rzeczywistych (typu Double
została skojarzona z fizycznym zbiorem danych 
ZBIOR2.DOC, znajdującym się na dyskietce w 
napędzie A i katalogu ZBIORY

background image

 

 

Otwieranie pliku

Do otwierania plików elementowych służą 2 
procedury:

procedure Rewrite(var F: File);
procedure Reset(var F [: File]);

Obie procedury otwierają zbiór zarówno do 
odczytu jak i do zapisu
Procedura Rewrite tworzy nowy zbiór, a 
procedura Reset pozwala odczytywać i 
zapisywać tylko w istniejących zbiorach

background image

 

 

Przykład tworzenia 

nowego pliku 

elementowego

type
complex = record

Re, Im : Double;

end;
var F: File of Complex;
{...}

Assign (F, ’A:\ZBIOR3.OUT’);
Rewrite (F);

Po skojarzeniu zmiennej plikowej F (elementy typu 

rekordowego complex) ze zbiorem ZBIOR3.OUT, 

znajdującym się na dyskietce w napędzie A , nastąpi 

utworzenie oraz  otwarcie nowego pliku.

background image

 

 

Przykład otwierania 

istniejącego pliku 

elementowego

var plik: file of record

Re, Im : Double;
      end;

{...}
Assign (plik,’b:\ZBIOR5.IN’);
Reset (plik);

Otwarty zostanie istniejący plik 

elementowy z napędu dyskietek B, o 

nazwie Zbior5.In

background image

 

 

Procedura Write

procedure Write(F, V1 [, V2,...,Vn ] 

);

Służy ona do zapisywania danych w 
plikach elementowych

Przykład użycia:
Write(F,Pracownik)

background image

 

 

Procedura Read

procedure Read(F, V1 [, 

V2,...,Vn ] );

Służy do odczytywania danych z plików 

elementowych

Przykład użycia:

read(F,Pracownik)

background image

 

 

Funkcje pomocnicze

W przetwarzaniu plików zdefiniowanych i 

nie zdefiniowanych często wykorzystuje 

się następujące funkcje i procedury 

standardowe:
Eof 
FilePos
FileSize
Seek
Truncate

background image

 

 

Funkcja EOF

function Eof(var F): Boolean;

testuje osiągnięcie końca zbioru
wartością tej funkcji jest wartość logiczna 

TRUE, gdy plik znajduje się w pozycji przed 

ostatnim elementem lub nie zawiera żadnych 

elementów, a wartość logiczna FALSE w 

pozostałych przypadkach.
Przykład użycia

while not EOF(F) do {...}

background image

 

 

Funkcja FilePos

function FilePos(var F): Longint;

Podaje aktualną pozycję w pliku
Wartością tej funkcji, jest liczba całkowita 
Longint podająca aktualne położenie pliku 
określonego za pomocą zmiennej plikowej 
(np.. 0 dla początku zbioru)
Przykład użycia:

NrAktualnegoElementu:=FilePos(F);

background image

 

 

Funkcja FileSize

function FileSize(var F): Integer;

Zwraca aktualny rozmiar wyspecyfikowanego 
pliku.
W przypadku plików elementowych jednostką 
miary jest liczba elementów.
Przykład użycia

IloscElementow:=FileSize(F);

background image

 

 

Procedura Seek

procedure Seek(var F; N: Longint);

Powoduje ustawienie położenia zbioru na 

elemencie o wskazanym numerze
F identyfikuje odnośny plik zdefiniowany
N – pozycja (nr wybieranego elementu)
Przykład użycia:
Seek(F,0) – powoduje ustawienie 

wskaźnika na 

początku zbioru

background image

 

 

Procedura Truncate

procedure Truncate(var F);

Powoduje usunięcie z zewnętrznego 
zbioru danych wszystkich jego elementów 
począwszy od aktualnej pozycji do końca 
zbioru
Przykład użycia

Truncate(F)

background image

 

 

Przykład wykorzystania 

instrukcji

Truncate

Program przyklad;
var plik: file of record

     nr: Byte;
     nazwisko: string[20];

                  imie: 

string[15];
     rok: 1900..2000;
     odwolanie : Byte;
   end;

begin
  

Assign(plik,’DANE.ROB
’);

  Reset (plik);
  Seek (plik, 50);
  Truncate (plik);
  Close (plik);
end.

Wykonaj program powodujący usunięcie ze zbioru 

DANE.ROB elementów począwszy od elementu o 

numerze porządkowym 50

background image

 

 

Zamykanie plików

procedure CloseFile(var F);

Po otwarciu pliku możliwe jest wykonanie na nim 

określonych operacji, po których zakończeniu 

należy plik zamknąć. Operacji tej dokonuje się 

poprzez wywołanie procedury CloseFile
Po zamknięciu pliku można daną zmienną plikową 

skojarzyć z innym fizycznym zbiorem danych
Przykład użycia

CloseFile(F)

background image

 

 

Deklaracje typów, skojarzenie ze 

zbiorem fizycznym  i otwieranie 

plików elementowych

Type
 Czytelnik=record

Nazwisko, Imie: 

String[40];

  wiek: Byte;

IlWypKsiaz: Byte;

 end;
{...}
var F: File of TCzytelnik;

  Czytelnik: TCzytelnik;

{tu  wykorzystywane w 

programie

 funkcje i procedury patrz slajdy 

43-47}

begin

AssignFile(F,’Zbior.dan’);
{$I-} Reset(F);
if IOResult<>0 then
 begin
  Rewrite(F) 
  if IOResult<>0 then Exit;
 end; {$I+}

 {tu dalszy ciąg programu – 

operacje na

  otwartym zbiorze i zamknięcie 

pliku – 48}

end;

background image

 

 

Wczytywanie danych

procedure Wczytaj(var Czyt: TCzytelnik);
begin

with Czyt do
 begin

     Nazwisko:=Form1.edNazwisko.Text;
    Imie:=Form1.edImie.Text;
    Wiek:=Form1.edWiek.Value;  

  IlWypKsiaz:=Form1.edIlosc.Value;
end;

end;

background image

 

 

Dodawanie nowego 

elementu

do pliku

procedure Dodaj(Czytelnik: 

TCzytelnik);

begin

Seek(F,FileSize(F));
Write(F, Czytelnik);

end;

background image

 

 

Modyfikacja istniejącego 

elementu

procedure Modyfikuj(Nr: Integer; Czytelnik: 

TCzytelnik);

begin

Seek(F,Nr);
Write(F,Czytelnik);

end;

background image

 

 

Wyszukiwanie elementów

procedure Wyszukaj(Nazwisko: String);
var i: Integer; Cz: TCzytelnik;
begin
  
Memo1.Clear;
  for i:=0 to FileSize(F)-1 do
   begin
    
Seek(F,i);   read(F,Cz);
     if (Nazwisko=Cz.Nazwisko) and (Cz.Wiek>=0) then
      Memo1.Lines.Add(‘Imie: ’+Cz.Imie+’ Wiek: 

‘+IntToStr(Cz.Wiek)+
     ’ Ilość książek: ‘+IntToStr(Cz.IlWypKsiaz)+‘Numer: 

‘+FilePos(F));

   end;
end;

background image

 

 

Usuwanie elementów

procedure Usun(Nr: Integer);
var Cz: TCzytelnik;
begin

Seek(F,Nr);   
read(F,Cz);
Cz.Wiek:=-1;
Seek(F,Nr);
Write(F,Cz);

end;

background image

 

 

Wybór operacji, zamknięcie 

zbioru

ch:=RadioButtonGroup.ItemIn

dex;

case ch of

0:  begin
         wczytaj(Czytelnik);
         Dodaj(Czytelnik);
        end;
1:  begin

      

Numer:=edModyfikuj.Value;
czytaj(Czytelnik); 

Modyfikuj(Numer,Czytelnik);
       end;

2: begin
  
Numer:=edUsun.Value;
  Usun(Numer);
end;
3: begin
 Nazwisko:=edNazw.Text;
 wyszukaj(Nazwisko);
end;

end;{case}
CloseFile(F);

background image

 

 

Przetwarzanie plików 

niezdefiniowanych

Przy przetwarzaniu plików niezdefiniowanych 

obowiązuje identyczny jak dla plików tekstowych 

i elementowych schemat postępowania

1. Zdefiniowanie zmiennej plikowej (część 

opisowa programu)

2. Skojarzenie zmiennej plikowej z fizycznym 

zbiorem danych

3. Otwarcie zbioru
4. Zapis\Odczyt danych
5. Zamknięcie zbioru

background image

 

 

Opis typu plikowego dla 

plików niezdefiniowanych

type 

identyfikator_pliku=file;

background image

 

 

Skojarzenie zmiennej plikowej z 

fizycznym zbiorem danych

AssignFile(identyfikator_pliku,wyrażenie_łańcucho

we);

identyfikator pliku  - dowolna zmienną plikową
wyrażenie łańcuchowe  - identyfikator fizyczny 

zbiór danych (łańcuch ten nie może być dłuższy 

niż 79 znaków
procedurę stosujemy identycznie jak dla plików 

tekstowych i elementowych
skojarzenie ze zbiorem fizycznym można 

zmieniać tylko wówczas gdy plik jest zamknięty

background image

 

 

Przykład stosowania

 procedury AssignFile

 

var plik: File;

{...}

 AssignFile(plik, 

‘A:\ZBIORY\ZBIOR2.DOC’);

zmienna plikowa plik reprezentująca plik 

niezdefiniowany została skojarzona z 

fizycznym zbiorem danych ZBIOR2.DOC, 

znajdującym się na dyskietce w napędzie A 

i katalogu ZBIORY

background image

 

 

Otwieranie pliku

Do otwierania plików niezdefiniowanych służą 2 procedury:

procedure Rewrite(var F: File [; Recsize: Word ] 
);
procedure Reset(var F : File[; Recsize: Word ] );

Obie procedury otwierają zbiór zarówno do odczytu jak i do 
zapisu
Procedura Rewrite tworzy nowy zbiór, a procedura Reset 
pozwala odczytywać i zapisywać w istniejących zbiorach
Parametr RecSize jest opcjonalny. Definiuje rozmiar 
wczytywanego rekordu. Domyślna wartość tego parametru 
wynosi 128.

background image

 

 

Przykład tworzenia 

nowego pliku 

niezdefiniowanego

 var F: file;
{...}
AssignFile(F, ’C:\ZBIORY\ZBIOR4.OUT’);
Rewrite (F, 100);

Operacje spowodują stworzenie i otwarcie nowego  

niezdefiniowanego 

pliku 

nazwie 

F. 

Zadeklarowano, że zapisy wyprowadzane do zbioru 

o  nazwie  ZBIOR4.OUT  umieszczonego  w  folderze 

Zbiory na dysku C i  będą miały po 100 bajtów.

background image

 

 

Przykład otwierania 

istniejącego pliku 

niezdefiniowanego

{...}
AssignFile(F,’B:\ZBIOR5.IN’);
Reset (F,1);

Otwarty 

zostanie 

istniejący 

niezdefiniowany z napędu dyskietek B, o 
nazwie Zbior5.In. Wielkość odczytywanej 
porcji danych zostaje ustalona na 1 bajt.

background image

 

 

Procedura BlockWrite

procedure BlockWrite

(var F: File; var Buf; Count: Integer [; var Result: 

Integer]);
Służy do zapisu  bufora w pliku niezdefiniowanym
Parametry

– F

- zmienna plikowa

– Buf

- dowolna zmienna do zapisu

– Count - maksymalna liczba zapisów
– Result

- zmienna w której umieszczona jest liczba 

poprawnie    wprowadzonych zapisów

Zapisany blok zapisuje Count*RecSize bajtów 

(RecSize określany jest podczas otwierania zbioru)

background image

 

 

Procedura BlockRead

procedure BlockRead

(var F: Filevar Buf; Count: Integer [;var Result: 

Integer]);
Służy do odczytu bufora z pliku niezdefiniowanego
Parametry

– F

- zmienna plikowa

– Buf

- dowolna zmienna (umieszcana w niej jest 

  

odczytana wartość)

– Count - maksymalna liczba odczytów
– Result

- zmienna zawierać będzie ilość poprawnych 

odczytów

Odczytywany blok zajmuje Count*RecSize bajtów 

(RecSize określany jest podczas otwierania zbioru)

background image

 

 

Funkcje pomocnicze

W  przetwarzaniu  plików  nie  zdefiniowanych 

często  wykorzystuje  się  następujące  funkcje  i 

procedury  standardowe  (ich  przeznaczenie 

było przedstawione podczas omawiania plików 

elementowych):
Eof
FilePos
FileSize
Seek
Truncate

background image

 

 

Zamykanie plików

procedure CloseFile(var F);

Po otwarciu pliku możliwe jest wykonanie na nim 

określonych operacji, po których zakończeniu 

należy plik zamknąć. Operacji tej dokonuje się 

poprzez wywołanie procedury CloseFile
Po zamknięciu pliku można daną zmienną plikową 

skojarzyć z innym fizycznym zbiorem danych
Przykład użycia

CloseFile(F)

background image

 

 

Przykład

Plik niezdefiniowany ma następują strukturę

- liczba całkowita(Integer-4 bajty)
- 3 liczby rzeczywiste (Double-8 bajtów*3)
- łańcuch tekstowy (String[20]-21-bajtów)

var a,b,c: Double;

   I: Integer;
   S: String[20]

background image

 

 

Przykład zapisu\odczytu 

dla plików 

niezdefiniowanych

var F: File;
begin

AssignFile(F,’Plik.bin’);
Rewrite(F,1);
BlockWrite(F,I,4);
BlockWrite(F,a,8);
BlockWrite(F,b,8);
BlockWrite(F,c,8);
BlockWrite(F,S,21);
CloseFile(F)

End.

var F: File;
begin

AssignFile(F,’Plik.bin’);
Reset(F,1);
BlockRead(F,I,4);
BlockRead(F,a,8);
BlockRead(F,b,8);
BlockRead(F,c,8);
BlockRead(F,S,21);
CloseFile(F)

End.

background image

 

 

Operacje na plikach i 

katalogach

Przejdziemy teraz do części wykładu 
pokazującej w jaki sposób realizować 
zadania związane z testowaniem 
obecności pliku (katalogu), zmianą 
jego nazwy, usuwaniem zbioru, itp...

background image

 

 

Funkcja DirectoryExists

function DirectoryExists(Name: string): Boolean;

Służy do sprawdzania czy katalog o nazwie 

określonej parametram Name istnieje na dysku
Zwracana wartość to TRUE jeśli katalog istnieje
W przeciwnym razie wynikiem funkcji jest FALSE
Przykład
if not DirectoryExists('c:\temp') then {...}
Operacje umieszczone  po then zostana wykonane 

tylko wtedy gdy katalog C:\TEMP nie istnieje

background image

 

 

Funkcja FileExists

function FileExists(const FileName: string): Boolean;

Służy do sprawdzania czy plik o nazwie określonej 

parametram FileName istnieje na dysku
Zwracana wartość to TRUE jeśli plik istnieje
W przeciwnym razie wynikiem funkcji jest FALSE
Przykład
if FileExists('c:\temp\plik.txt') then {...}
Operacje umieszczone  po then zostana wykonane 

tylko wtedy gdy plik C:\TEMP\Plik.txt istnieje na dysku

background image

 

 

Procedura ChDir

procedure ChDir(S: String);

powoduje zmianę bieżącego katalogu na 
katalog i (lub) napęd określony przez 
argument S
Przykład

{$I-}
ChDir(’C:\Katalog’);
{$I+}
if IOResult<>0 then ShowMessage(‘Nie odnaleziono 
katalogu');

background image

 

 

Procedura GetDir

procedure GetDir(D: Byte; var S: String);

Pozwala uzyskać informację o bieżącym 
katalogu w określonym napędzie
Parametry

– D - oznacza numer napędu dysków (0- napęd 

bieżący, 1-napęd A, 2- napęd B, 3- napęd C...)

– S - zmienna typu string w której umieszczony 

zostanie łańcuch zawierający ścieżkę bieżącego 
katalogu na wskazanym dysku

background image

 

 

Przykład korzystania z 

procedury GetDir

GetDir (3, s)

powoduje podstawienie pod S nazwy 
bieżącego katalogu w napędzie C. 
Jeśli napęd C jest bieżący, to taki 
sam wynik uzyskamy po wywołaniu:

GetDir (0, s)

background image

 

 

Funkcja GetCurrentDir

function GetCurrentDir: string;

Zwraca łańcuch zawierający nazwę 
bieżącego katalogu

background image

 

 

  Procedura MkDir

procedure MkDir(S: String);

Służy do utworzenia nowego podkatalogu
S – ścieżka dostępu do tworzonego katalogu
Przykład

MkDir (’A:\BIN\ZBIORY’)

  utworzenie na dyskietce w napędzie A w 

katalogu BIN podkatalogu ZBIORY. Katalog BIN 

nie może przy tym zawierać pliku o nazwie 

ZBIORY.

background image

 

 

Funkcja CreateDir

function CreateDir(const Dir: string): Boolean;

Funkcja tworzy nowy katalog na dysku
Parametr Dir określa ścieżkę dostępu do 
nowego katalogu
Jeśli jej rezultatem jest TRUE operacja tworzenia 
katalogu została zakończona powodzeniem
W przeciwnym wypadku zwracana jest wartość 
FALSE 

background image

 

 

Przykład korzystania z 

CreateDir

uses FileCtrl;
procedure TForm1.Button1Click(Sender: 

TObject);

begin
  if not DirectoryExists('c:\temp') then
    if not CreateDir('C:\temp') then
     raise Exception.Create (‘Niemożliwe 

utworzenie  katalogu c:\temp');

end;

background image

 

 

Procedura RmDir

procedure RmDir(S: String);

Służy do usunięcia pustego, tj. nie zawierającego 

żadnych zbiorów, podkatalogu
S –ścieżkę dostępu do usuwanego katalogu
Usuwany katalog powinien być pusty, tzn. nie 

powinien zawierać podkatalogów i plików
Przykład 

{...}

RmDir('C:\\BIN');

if IOResult <> 0 then ShowMessage('Niemożliwe 

usunięcie katalogu')
else ShowMessage('Katalog usunięty'); {...}

background image

 

 

Funkcja RemoveDir 

function RemoveDir(const Dir: string): 

Boolean;

Służy do usunięcia pustego, tj. nie 
zawierającego żadnych zbiorów, podkatalogu
Dir –ścieżkę dostępu do usuwanego katalogu
Zwracana wartość to TRUE jeśli operacja się 
uda, a w przeciwnym razie FALSE

background image

 

 

Procedura Erase

procedure Erase(var F);

Powoduje usunięcie zewnętrznego zbioru danych 

skojarzonego z wyspecyfikowaną zmienną plikową
Plik  podczas usuwania nie może być otwarty. 
Przykład
Erase(plik_roboczy);
Wykonanie instrukcji spowoduje usunięcie z dysku 

pliku skojarzonego ze zmienną plikową 

plik_roboczy

background image

 

 

Funkcja DeleteFile

function DeleteFile(const FileName: string): Boolean;

Kasuje z dysku plik o wskazanej przez parametr 

FileName nazwie (i ścieżce dostępu)
Jeśli plik nie może zostać usunięty wówczas zwracana 

jest wartość FALSE
W przeciwnym wypadku jako wynik otrzymujemy 

TRUE
Przykład

if FileExists(FileName) then
  if 
MsgBox(' Czy na pewno chcesz usunąć plik ' 

      +ExtractFileName(FileName)+ '?'), [ ]) = IDYes

  then DeleteFile(FileName);

background image

 

 

Procedura Rename

procedure Rename(var F; Newname);

Pozwala na zmianę nazwy zbioru 
dyskowego
Parametr F określa nazwę zmiennej 
plikowej skojarzonej ze zbiorem którego 
nazwę chcemy zmienić
NewName – zawiera nową nazwę zbioru

background image

 

 

Przykład korzystania z 

instrukcji Rename

Program przyklad;
var nazwa: string[12];

  plik: File;

begin
  Write(’ podaj nazwę zbioru : ’);
  Readln(nazwa);
  AssignFile(plik, nazwa);
  Write(’Wprowadż nową nazwę 

zbioru :’);

  Readln(nazwa);
  Rename (plik, nazwa)
end.

  Wykonanie 

programu 
spowoduje zmianę 
wprowadzonej z 
klawiatury nazwy 
zbioru na inną, 
także wprowadzoną 
z klawiatury 
(zakładamy, że 
zbiór o pierwszej 
wprowadzonej 
nazwie istnieje).

background image

 

 

Funkcja RenameFile

function RenameFile(const OldName, NewName: 

string): Boolean;

Służy do zmiany nazwy pliku
Plik o nazwie OldName musi istnieć na dysku
Zwracana wartość to TRUE  lub FALSE w 
zależności od rezultatu wykonania operacji
Przykład
if not RenameFile(‘Stary.TXT','Nowy.TXT') then
  ErrorMsg('Błąd podczas zmiany nazwy pliku!');

background image

 

 

Funkcja CopyFile

function CopyFile(Zrodlowy,Docelowy: String;

    NieNadpisuj: Boolean): Boolean;
Efektem działania jest skopiowanie pliku o nazwie (i 

ścieżce dostępu) podanej przez parametr Zrodlowy do 

miejsca (ścieżka dostępu i nazwa pliku) wskazanego 

przez parametr Docelowy.
Parametr NieNadpisuj określa zachowanie funkcji w 

wypadku istnienia pliku docelowego. Dla wartości TRUE 

istniejący plik nie jest nadpisywany, a wykonanie funkcji 

kończy się niepowodzeniem. Jeśli parametr ma wartość 

FALSE istniejący plik zostaje zastąpiony nowym plikiem.
Wynik funkcji informuje nas o tym czy kopiowanie zostało 

wykonane (TRUE – operacja zakończona powodzeniem)

background image

 

 

Funkcja MoveFile

function MoveFile(Zrodlowy,Docelowy: String): 

Boolean;

Efektem działania jest przeniesienie pliku o nazwie 
(i ścieżce dostępu) podanej przez parametr 
Zrodlowy do miejsca (ścieżka dostępu i nazwa 
pliku) wskazanego przez parametr Docelowy.
Wynik funkcji informuje nas czy plik został 
przeniesiony (TRUE – operacja zakończona 
powodzeniem)

background image

 

 

Atrybuty pliku

Stała 

Wartość

faReadOnly

$00000001

faHidden

$00000002

faSysFile

$00000004

faVolumeID

$00000008

faDirectory

$00000010

faArchive

$00000020

faAnyFile

$0000003F

background image

 

 

Funkcja FileGetAttr

function FileGetAttr(const FileName: 

string): Integer;

Funkcja jako wynik zwraca atrybuty 
pliku o nazwie FileName

background image

 

 

Funkcja FileSetAttr

function FileSetAttr(const FileName: string

Attr: Integer): Integer;

Procedura ustawia pliku o podanej przez 

FileName nazwie
Parametr Attr  - określa które z atrybutów 

pliku zostaną ustawione
Funkcja zwraca 0 jeśli operacja się 

powiedzie, w przeciwnym wypadku 

zwracaną wartością jest kod błędu

background image

 

 

Operacje na nazwach

plików i katalogów

Nazwa 

funkcji

Wynik działania funkcji

ExpandFile

Name

Pełna ścieżkę wraz z nazwą pliku

ExtractFile
Dir

Ścieżka dostępu do katalogu (nazwa 
dysku i nazwa katalogu)

ExtractFile
Ext

Rozszerzenie pliku

ExtractFile

Name

Nazwa pliku

ExtractFile
Path

Ścieżka dostępu do pliku

ChangeFile
Ext

Zmiana rozszerzenia pliku


Document Outline