Wykład XXII i XXIII
Zapis i odczyt informacji w
plikach
Podstawy informatyki
Semestr II Transport
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.
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
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)
Typ plikowy i opis
zmiennej plikowej
W opisie pliku tekstowego
wykorzystywany jest predefiniowany
identyfikator typu
Text
.
Przykład definicji pliku tekstowego
var F: Text;
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)
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
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}
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);
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.
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.
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
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.
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);
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’);
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
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);
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}
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}
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.
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.
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.
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.
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
tó
w
w
z
b
io
rz
e
...
...
...
...
...
...
...
...
3
2
1
0
wskaź
nik
eleme
ntu
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
Opis typu elementowego
plikowego
Plik elementowy
type
identyfikator_pliku=file of
opis_typu_elementów_pliku;
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
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
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
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.
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
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)
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)
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
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 {...}
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);
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);
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
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)
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
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)
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;
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;
Dodawanie nowego
elementu
do pliku
procedure Dodaj(Czytelnik:
TCzytelnik);
begin
Seek(F,FileSize(F));
Write(F, Czytelnik);
end;
Modyfikacja istniejącego
elementu
procedure Modyfikuj(Nr: Integer; Czytelnik:
TCzytelnik);
begin
Seek(F,Nr);
Write(F,Czytelnik);
end;
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;
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;
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);
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
Opis typu plikowego dla
plików niezdefiniowanych
type
identyfikator_pliku=file;
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
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
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.
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
o
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.
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.
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)
Procedura BlockRead
procedure BlockRead
(var F: File; var 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)
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
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)
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]
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.
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...
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
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
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');
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
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)
Funkcja GetCurrentDir
function GetCurrentDir: string;
Zwraca łańcuch zawierający nazwę
bieżącego katalogu
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.
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
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;
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'); {...}
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
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
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);
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
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).
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!');
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)
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)
Atrybuty pliku
Stała
Wartość
faReadOnly
$00000001
faHidden
$00000002
faSysFile
$00000004
faVolumeID
$00000008
faDirectory
$00000010
faArchive
$00000020
faAnyFile
$0000003F
Funkcja FileGetAttr
function FileGetAttr(const FileName:
string): Integer;
Funkcja jako wynik zwraca atrybuty
pliku o nazwie FileName
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
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