background image

 

 

Operacje na Plikach

background image

 

 

Typy plików

Pliki tekstowe

Pliki typowane

Pliki strumieniowe

Pliki amorficzne

background image

 

 

Pliki tekstowe

Struktura danych (zewnętrzna) zawierających tekst

Ogranicznikiem każdego wiersza jest znak o kodzie 

ASCII #13

Typ danych TextFile

Otwieranie pliku: skojarzenie zmiennej typu TextFile 

ze ścieżką dostępu, za pomocą procedury AssignFile

Po otwarciu uzyskujemy 

uchwyt

uchwyt do pliku

Od tej pory możemy korzystać z pliku

Należy zdecydować, czy plik otwieramy tylko do 

odczytu, czy też do zapisu

Po zakończeniu korzystania z pliku, należy go zwolnić 

(zamknąć) za pomocą procedury CloseFile

background image

 

 

Operowanie na pliku  

tekstowym

Procedura reset – otwarcie do odczytu

Procedura rewrite – otwarcie do zapisu

Funkcja FileExists (typu Boolean)

Procedury readwritereadlnwriteln

Przykład: Project1

Polecenie Append nie usuwa pliku; 

umożliwia dopisywanie do niego nowych 

informacji

background image

 

 

Pliki typowane

Zwane też rekordowymi

Konieczne zdefiniowanie typu rekordowego

Najlepiej spakowanego (packed)

Zagnieżdżone łańcuchy znaków powinny mieć określony 

maksymalny rozmiar

Powiązanie typu rekordowego z typem plikowym (file 

of)

Funkcja FileSize wyznacza rozmiar  pliku (liczbę 

rekordów)

Funkcja FilePos wyznacza numer bieżącego rekordu

Funkcja Seek wyszukuje określony rekord, np. 

Seek(DataBase, FileSize(DataBase))

Przykład: Project2

background image

 

 

Pliki strumieniowe

Pliki typowane nie wymagają VCL

Abstrakcyjna klasa TStream; podklasy

TFileStream – do operowania na plikach

TStringStream – na łańcuchach tekstowych

TMemoryStream – na danych w pamięci 

operacyjnej

TResourceStream – na zasobach

Strumienie obejmują dane składające się z 

bajtów

Dane mogą być przesyłane między: pamięcią, 

plikami, zasobami itp.

background image

 

 

Operowanie na plikach 

strumieniowych

var potok: TFileStream;
potok:=TFileStream.Create(‘C:\ustawienia’, 

fmOpenRead);

Tryb otwarcia

fmCreate – utworzenie nowego pliku

fmOpenRead – otwarcie tylko do odczytu

fmOpenWrite – zapis

fmOpenReadWrite – odczyt + zapis

fmShareExclusive – inna aplikacja nie może otworzyć pliku

fmShareDenyWrite – inna aplikacja może tylko czytać plik

fmShareDenyRead - odpowiednio

background image

 

 

Przykład operowania na 

strumieniach

Cel: zapamiętywanie ustawienia 
komponentu formularza

Klasa TFileStream

Jej metoda WriteComponentRes 
zapisuje ustawienia wybranego 
komponentu w pliku .RES

Przykład: 
StreamComponentSave.exe

background image

 

 

Pliki amorficzne

Pliki amorficzne (ang. untyped file) są plikami bez struktury; 

pliki binarne

Odczytujemy z nich bajty lub inną określona porcję danych 

(ziarno)
var fFile: File;

Dostępne funkcje podobne do funkcji plików tekstowych

Zapis i odczyt danych odbywa się jednak za pomocą procedur: 

BlockWrite i BlockRead

Procedury Reset i Rewrite wymagają drugiego argumentu 

(liczba porcji danych odczytywanych jednocześnie); wartością 

domyślna jest 128

Argumenty BlockRead: plik (zmienna typu File), bufor danych, 

liczba danych do odczytu, opcjonalny argument – liczba 

faktycznie odczytanych bajtów

Przykład: Project3

background image

 

 

Operacje ogólne

Kopiowanie plików

CopyFile(‘C:\Plik1.pas’,’C:\Plik2.pas,true);

Ścieżka źródłowa, docelowa, czy zastąpić istniejący 

plik o tej samej nazwie

MoveFile(‘C:\Plik1.pas’,’C:\Plik2.pas);

Bardziej uniwersalne podejście – skorzystanie z 

WinAPI  (m.in. możliwość kopiowania całych folderów)

Konieczność dodania modułu ShellAPI w klauzuli uses

Wypełnienie rekordu, np. S, typu TSHFileOpStruct 

zawierającego parametry żądanej operacji

Wykonanie operacji ShFileOperation(S);

mkDir(‘C:\nowy_folder); rmDir ...

background image

 

 

Korzystanie z WinAPI

var
  S: TSHFileOpStruct;
begin
S.Wnd:=Handle; //uchwyt głównego formularza
S.wFunc := FO_COPY; operacja kopiowania
S.pFrom := ‘C:\File1.src’ // folder (plik) źródłowy
S.pTo := ‘D:\File1.src’ //folder docelowy
S.fFlags := FOF_NOCONFIRMATION or 

FOF_RENAMEONCOLLISION or FOF_SIMPLEPROGRESS;

S.fAnyOperationsAborted := true; //jest możliwość anulowania?
S.lpszProgressTitle := ‘Kopiowanie w toku’ //tekst

ShFileOperation(S); //wykonaj
end;

background image

 

 

Korzystanie z WinAPI 

(c.d.)

Flagi operacji

FO_COPY – 
kopiowanie

FO_DELETE – 
usunięcie pliku 
(katalogu) pFrom

FO_MOVE – 
przeniesienie

FO_RENAME

Opcje

FOF_ALLOWUNDO – możliwe cofnięcie 

operacji

FOF_FILESONLY – dotyczy plików z 

folderu, a nie podfolderów

FOF_NOCONFIRMATION – 

niewyświetlanie potweirdzeń

FOF_NOCONFIRMMKDIR – nie tworzy 

nowego folderu jeżeli operacja tego 

wymaga

FOF_SILENT – okno kopiowania nie 

zostanie wyświetlone

FOF_SIMPLEPROGRESS – wyświetla 

wskazany tekst (ostatnie pole), ale nie 

wyświetla kopiowanego pliku

FOF_RENAMECOLISSION – w 

przypadku istnienia pliku o tej samej 

nazwie, jego nazwa jest zmieniana

background image

 

 

Wyszukiwanie plików

Funkcje FindFirst i FindNext (SysUtils.pas)

Rekord, w którym są przechowywane informacje o 

znalezionym pliku

type
TSearchRec=record
Time: integer; //czas utworzenia pliku
Size: integer; //rozmiar
Attr: integer;  //atrybuty
Name: TFileName; //nazwa
ExcludeAttr: integer;
FindHandle: Thandle;
FindData: TWin32FindData;
end;

background image

 

 

Wyszukiwanie plików 

(c.d.)

Atrybuty plików

faReadOnly – tylko do 
odczytu

faHidden – ukryty

faSysVolume – 
systemowy

faVolumeID – etykieta 
woluminu

faDirectory – folder

faArchive – 
zarchiwizowany

faAnyFile – dowolny plik

Rozpoczęcie wyszukiwania

FindFirst(‘C:\Folder\*.*’, 

faDirectory, DR)

Ostatni parametr – nazwa 
zmiennej typu TSearchRec

Zakończenie

FindClose(DR)

FindFirst wyznacza 0, gdy 
wyszukiwanie się powiodło

background image

 

 

Przykład: pobranie listy 

plików z folderu

procedure TMainForm.btnFindClick (Sender: Tobject);
var
  SR: TSearchRec;
  Found: integer;
begin
  Found:=FindFirst(‘C:\folder\*.*’, faAnyFile, SR);
  while Found = 0 do
  begin
    Memo1.Lines.Add(SR.Name);
    Found:=FindNext(SR);
  end;
  FindClose(SR);
end;


Document Outline