Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Prelucrarea fisierelor in Visual Basic


Prelucrarea fisierelor in Visual Basic


Prelucrarea fisierelor in Visual Basic

In prima versiune de Visual Basic, fisierele au fost prelucrate folosind instructiunea Open si alte instructiuni si functii inrudite. Aceste mecanisme sunt suportate complet in Visual Basic 6.0, insa ele pot fi inlocuite, eventual, prin utilizarea modelullui obiectului FSO (File System Object).

Daca proiectati aplicatia dumneavoastra pentru utilizarea bazelor de date, nu veti avea nevoie sa asigurati accesul direct la fisiere. Controlul de date si controalele legate permit citirea si scrierea datele din si in baza de date; acest procedeu este mult mai usor de folosit de cat utilizarea tehnicilor de acces direct la fisiere.

Tipuri de acces la fisiere

Un fisier contine, de fapt, o succesiune de bytes stocati pe disc. Cand aplicatia acceseaza un fisier, ea trebuie sa presupuna ca bytes reprezinta caractere, numere, siruri s.a.m.d.



In functie de tipul de date pe care le contine fisierul, trebuie sa folositi tipul potrivit de acces la fisiere. In Visual Basic, exista trei tipuri de acces la fisiere:

Secvential - Pentru citirea si scrierea fisierelor text in blocuri continui.

Aleator (random) - Pentru citirea si scrierea fisierelor text sau binare cu inregistrari de lungime fixa.

Binar - Pentru citirea si scrierea fisierelor structurate arbitrar.

Accesul secvential este destinat prelucrarii fisierelor de text simple. Acessul secvential presupune ca fiecare caracter din fisier reprezinta fie un caracter de text fie o secventa de formatare a textului (cum ar fi, un caracter de linie noua). Datele sunt stocate drept caractere ANSI.

Fisierul deschis in acces aleator (sau acces direct) se presupune ca este format din inregistrari (articole) de lungime fixa identice. Puteti folosi tipuri de date definite de utilizator pentru a crea articole cu numeroase campuri; fiecare camp putand avea un tip diferit de date. Datele sunt stocate ca informatii binare.

Accesul binar va permite sa utilizati fisiere pentru a stoca orice informatie vreti. Ele sunt similare fisierelor in acces aleator, cu exceptia faptului ca nu se face nici o prezumptie privind tipul de date sau lungimea inregistrarilor. Totusi, pentru regasirea corecta a datelor trebuie sa cunoasteti cum au fost stocate datele.

Functiile si instructiunile ce se pot utiliza pentru accesul la fisiere

In tabelul urmator sunt prezentate pe scurt principalele instructiuni ce se pot utiliza pentru accesul la un fisier:

Nume

Descriere

Open

Asigura executarea operatiilor de intrare/iesire asupra unui fisier.

Close

Incheie operatiile de intrare/iesire pentru un fisier deschis cu instructiunea Open.

Get

Citeste intr-o variabila datele dintr-un fisier disc deschis cu instructiunea Open.

Put

Scrie datele dintr-o variabila intr-un fisier pe disc deschis cu instructiunea Open.

Input #

Citeste datele dintr-un fisier deschis in acces secvential si le atribuie unor variabile.

Line Input #

Citeste o singura linie dintr-un fisier secvential deschis si o atribuie unei variabile de tip String.

Print #

Scrie intr-un fisier cu acces secvential datele formatate pentru afisare.

Write #

Scrie intr-un fisier variabilele precizate separandu-le prin virgule si incadrand intre ghilimele sirurile de caractere.

Kill

Sterge un fisier de pe disc

Name

Redenumeste un fisier, director sau dosar.

Seek

Stabileste pozitia pentru urmatoarea operatie de citire/scriere intr-un fisier deschis cu instructiunea Open

Type . End Type

Declara un tip de data definit de utilizator.

Principalele functii utilizate in prelucrarea fisierelor sunt prezentate in urmatorul tabel:

Functie

Descriere

EOF

Returneaza un intreg reprezentand valoarea booleana True cand s-a intalnit sfarsitul de fisier in cazul unui fisier deschis pentru acces secvential sau aleator.

Input

Returneaza un sir continand caracterele citite dintr-un fisier deschis in modul Input sau Binar.

LOF

Returneaza un intreg lung repezentand lungimea, in bytes, a unui fisier deschis cu instructiunea Open.

Seek

Returneaza un intreg lung care specifica pozitia curenta de citire/scriere dintr-un fisier deschis cu instructiunea Open.

Loc

Returneaza un intreg lung care specifica pozitia curenta de citire/scriere intr-un fisier deschis.

FileLen

Returneaza un intreg lung care specifica lungimea, in bytes, a unui fisier.

FreeFile

Returneaza un intreg care reprezinta urmatorul numar de fisier disponibil pentru utilizare intr-o instructiune Open.

Tabelul urmator prezinta principalele instructiuni si functii disponibile in functie de tipul de acces la fisier:

Instructiuni & Functii

Tipul de acces

Secvential

Aleator

Binar

Close

X

X

X

Get

X

X

Input( )

X

X

Input #

X

Line Input #

X

Open

X

X

X

Print #

X

Put

X

X

TypeEnd Type

X

Write #

X

Fisiere in acces secvential

Accesul secvential lucreaza cel mai bine cand vreti sa prelucrati fisiere ce contin numai text, cum ar fi fisierele create cu un editor obisnuit de text (WordPad, Notepad) - adica, fisiere in care datele nu sunt organizate intr-un sir de inregistrari. Accesul secvential nu este indicat pentru stocarea unui sir de numere, deoarece fiecare numar este memorat ca un sir de caractere. Spre exemplu, un numar de 4 cifre va necesita pentru memorare 4 bytes, in loc de 2 bytes cat ar fi nevoie pentru a stoca numarul respectiv ca un intreg codificat binar..

Deschiderea fisierelor pentru acces secvential

Cand deschideti un fisier pentru acces secvential, puteti sa executati una din urmatoarele operatii:

Citirea caracterelor dintr-un fisier (modul Input);

Scrierea caracterelor intr-un fisier (modul Output)

Adaugarea caracterelor intr-un fisier (modul Append)

Pentru a deschide un fisier in acces secvential se foloseste o instructiune Open a carei sintaxa este:

Open <nume> For <mod> As <nrfisier> [Len = <lng>]

unde:

<nume>

O expresie de tip String care specifica un nume de fisier, putand include directorul/dosarul si unitatea in care se gaseste fisierul.

<mod>

Un cuvant cheie care specifica modul de deschidere al fisierului. Poate fi unul din urmatoarele cuvinte cheie: Input (citire), Output (scriere) sau Append (adaugare).

<nrfisier>

Un numar corect de fisier, cuprins intre 1 si 511. Se foloseste pentru a specifica fisierul in instructiunile si functiile de prelucrare a fisierului respectiv.

<lng>

Un intreg, cel mult egal cu 32767 (bytes), care se poate utiliza in cazul fisierelor secventiale pentru a preciza numarul de caractere din zona tampon (buffer).

Observatii

Cand un fisier secvential este deschis pentru citire (modul Input), el trebuie sa existe, in caz contrar se produce o eroare de executie.

Cand incercati sa deschideti un fisier secvential inexistent pentru scriere (modul Output) sau adaugare (modul Append), instructiunea Open creaza mai intai fisierul specificat si apoi il deschide.

Argumentul optional Len specifica numarul de caractere ce se pastreaza in buffer atunci cand se copiaza datele intre fisier si programul dumneavoastra.

Dupa deschiderea unui fisier secvential pentru o operatie de citire, scriere sau adaugare trebuie sa-l inchideti, folosind instructiunea Close, inainte de-al redeschide pentru un alt tip de operatie.

Scrierea datelor in fisierele secventiale

Pentru a stoca intr-un fisier secvential continutul unor variabile se executa urmatoarele operatii:

Se deschide fisierul respectiv pentru o operatie de scriere sau adaugare. Spre exemplu pentru a scrie in fisierul Test.dat continutul unei variabile numite sLinie, deschiderea fisierului se poate realiza astfel:

Open "Test.dat" For Output As #1

Se foloseste instructiunea Print # sau Write # pentru a transmite in fisier continutul variabilei sLinie, astfel:

Print #1, sLinie

sau

Write #1, sLinie

Observatie Instructiunea Write # permite scrierea intr-un fisier a unei liste de expresii numerice si/sau siruri de caractere. In fisiere, valorile fiecarei expresii se separa prin virgule, iar sirurile de caractere sunt incluse intre ghilimele. Spre exemplu, segmentul de cod:

Dim sNume As String, iNumar As Integer

sNume = "Ionescu Vasile"

iNumar = 24536

Write #1, sNume, iNumar

va scrie in fisierul desemnat prin numarul de fisier #1 urmatoarea inregistrare:

"Ionescu Vasile",24538

inclusiv toate semnele de punctuatie.

Folosirea instructiunilor Write # si Input # pentru scrierea si respectiv citirea fisierului secvential simuleaza accesul direct sau binar la fisier. Ele sunt foarte indicate atunci cand vreti sa folsoiti date organizate in inregistrari (sau articole) fara a folosi un tip de data definit de utiliztor.

Sintaxele instructiunilor Print # si Write # sunt identice:

Print | Write #<nr.fisier>, [<lista_iesire>]

unde:

<nr.fisier>

Numarul cu care a fost deschis fisierul.

<lista_iesire>

Lista variabilelor a caror continut se va scrie in fisier. In lista variabilele se vor separa prin virgule.

Citirea datelor din fisierele secventiale

Pentru prelucrarea continutului unui fisier secvential se executa urmatoarele operatii:

Se deschide fisierul pentru o operatie de citire. Spre exemplu, pentru deschiderea fisierului Test.dat din exemplu anterior se va folosi o instructiune Open de forma:

Open "Test.dat" For Input As #1

Se folosesc instructiunile Line Input # sau Input # sau functia Input() pentru a citi datele intr-o variabila de program. Spre exemplu, pentru a citi datele din fisierul Test.dat intr-o variabila numita sLinie se poate utiliza una din urmatoarele linii de cod:

Line Input #1, sLinie

sau

Input #1, sLinie

sau

sLinie = Input(10, #1)

Observatii

Functia Input() poate fi folosita pentru a citi intr-o variabila orice numar de caractere dintr-un fisier secvential. Sintaxa apelului functiei Input() este urmatoarea:

Input(<nr.carcatere>, [#]<nr.fisier>)

unde:

<nr.caractere>

O expresie numerica corecta care specifica numarul de caractere ce se va returna.

<nr.fisier>

Numarul de fisier asociat prin instructiunea Open.

Instructiunea Line Input # se foloseste in special atunci cand datele au fost scrise in fisier folosind instructiunea Print #. Sintaxa instructiunii este:

Line Input #<nr.fisier> <variabila>

unde:

<nr.fisier>

Numarul cu care a fost deschis fisierul.

<variabila>

Numele variabilei, de tip String, in care se vor citi datele.

Instructiunea citeste o linie de caractere din fisier, adica toate caracterele intalinite pana la secventa carriage return - line feed (secventa de coduri ASCII 13 si 10). Instructiunea Line Input # recunoaste aceasta secventa de coduri, atunci cand se citeste o linie intr-o variabila, dar nu le pastreaza.

Instructiunea Input # permite citirea unei liste de valori numerice si/sau sir de caractere scrise intr-un fisier folosind instructiunea Write #. Sintaxa acestei instructiuni este:

Input #<nr.fisier>, <lista_intrare>

unde:

<nr.fisier>

Numarul asociat fisierului la deschidere.

<lista_intrare>

Lista de variabile, separate prin virgule, in care se vor citi datele scrise intr-o inregistrare din fisier.

Fisiere in acces direct

Bytes din fisierele in acces aleator formeaza inregistrari (articole) identice; fiecare inregistrare putand contine unul sau mai multe campuri. O inregistrare cu un singur camp corespunde unui tip standard de data, cum ar fi un intreg sau un sir de lungime fixa. O inregistrare cu mai multe campuri corespunde unui tip de data definit de utilizator, folosind instructiunea Type . End Tupe

Definirea tipului de inregistrare

Inainte de a deschide un fisier pentru acces aleator trebuie sa definiti un tip care va corespunde inregistrarilor pe care le va contine sau se gasesc in fisier. Spre exemplu, pentru a prelucra un fisier ce contine sau va contine date despre persoane, trebuie sa declarati un tip de data definit de utilizator, numit Persoana astfel:

Type Persoana

ID As Integer

Nume As String * 15

Prenume As String * 15

DataNastere As Date

Adresa As String * 30

Localitate As String * 20

Judet As String * 2

Telefon As String * 11

End Type

Lungime, in bytes, a unei astfel de inregistrari este de 103 bytes (icodul ID de tip Integer ocupa 2 bytes, data nasterii de tip Date ocupa 8 bytes, iar sirurile ocupa spatiul precizat prin valorile atasate).

Declararea variabilelor

Pentru a putea prelucra datele dintr-un fisier in acces aleator este necesar sa declarati o variabila a tipului de data definit de utilizator asociat inregistrarilor din fisier, folosind una din instructiunile de declarare variabile. Spre exemplu:

Dim recAbonat As Persoana

declara o variabila locala a tipului Persoana.

Deoarece toate inregistrarile dintr-un fisier in acces aleator trebuie sa aiba aceeasi lungime, este util ca elementele de tip sir de caractere dintr-un tip de data definita de utilizator sa aiba o lungime fixa, asa cum s-a vazut in declaratia tipului Persoana, unde spre exemplu, campurile Nume si Prenume au o lungime fixa de 15 caractere. Daca sirul real contine mai putine caractere de cat lungimea fixata pentru elementul de tip sir corespunzator, Visual Basic il va completa cu spatii. Daca insa, sirul este mai lung de cat dimensiunea campului, el va fi trunchiat.

Daca folositi siruri cu dimensiune variabila, marimea totala a oricarei inregistrari scrise cu instructiunea Put sau citite cu instructiunea Get nu trebuie sa depaseasca lungimea inregistrarii declarate in clauza Len a instructiunii Open.

Pentru a putea exemplifica in continuare utilizarea unor instructiuni pentru fisierele in acces direct vom considera ca in program au fost incluse urmatoarele linii de cod:

Type Persoana ' Declararea unui tip de data definit de utilizator

ID As Integer

Nume As String * 15

Prenume As String * 15

DataNastere As Date

Adresa As String * 30

Localitate As String * 20

Judet As String * 2

Telefon As String * 11

End Type

Dim artAbonat As Persoana    ' Varibila a tipului Persoana

Dim iNrFisier As Integer    ' Numarul asociat fisierului la deschidere

Dim lLungArt As Long    ' Lungimea, in bytes, a inregistrarii

Dim lPozitie As Long ' Pozitia inregistrarii curente

Dim iUltimArt As Long    ' Numarul ultimei inregistrari

lLungArt = LenB(artAbonat) ' Determina lungimea unei inregistrari

Aceste linii de cod asigura definirea unui tip de date, declararea unor variabile si determinarea lungimii, in bytes, a inregistrarilor fisierului.

Deschiderea fisierelor in acces aleator

Instructiunea Open necesara deschiderii unui fisier in acces aleator are urmatoarea sintaxa:

Open <nume_fisier> [For Random As <nr.fisier> Len <lung.art>

unde:

<nume_fisier>

Numele fisierului ce va fi deschis in acces aleator. Poate fi un specificator complet de fisiere, adica numele si extensia fisierului va fi precedat de calea si unitatea de disc pe care se afla fisierul.

<nr.fisier>

Numarul de fisier (cuprins intre 1 si 511) asociat la deschiderea fisierului..

<lung.art>

Specifica lungimea, in bytes, a inregistrarii.

Spre exemplu, pentru deschiderea fisierului Aleator.dat se poate folosi urmatoarea linie de cod:

Open 'Aleator.dat' For Random As iNrFisier Len = lLungArt

Observatii

Deoarece accesul aleator este tipul prestabilit de acces la fisiere, cuvintele cheie For Random pot lipsi din instruciunea Open de deschidere a unui fisier in acces aleator.

Daca lungimea declarata (argumentul <lung.art>) este mai mica de cat lungimea articolului scris in fisier, se genereaza o eroare.

Deoarece la deschiderea unui fisier in acces aleator nu se precizeaza tipul operatiei (de citire sau de scriere), fisierul repsectiv poate fi scris si/sau citit; deci intr-un fisier cu acces aleator se pot actualiza inregistrarile.

Editarea fisierelor deschise in acces aleator

Pentru a edita datele dintr-un fisier deschis in acces aleator trebuie parcurse urmatoarele operatii:

Deschiderea fisierului in acces aleator.

Pozitionarea pe inregistrarea de editat.

Citirea in variabile de memorie a inregistrarii de editat.

Modificarea valorilor din variabilele de memorie.

Rescrierea inregistrari editate.

Citirea inregistrarilor in variabile

Pentru a copia o inregistrare din fisier in variabile de memorie se foloseste instructiunea Get a carei sintaxa este:

Get <nr.fisier>, <nr.art>], <variabila>

unde:

<nr.fisier>

Numarul de fisier care a fost asociat la deschiderea fisierului.

<nr.art>

Numarul articolului (expresie numerica de tip Long) care va fi citit. Reprezinta pozitia inregistrarii in fisier. Daca nu se precizeaza acest argument, se citeste inregistrarea curenta.

<variabila>

Variabila de memorie in care sunt citite datele (o variabila a unui tip de data definit de utilizator).

Spre exemplu, pentru a citi inregistrarea curenta in variabila recAbonat de tip Persoana, declarate anterior, se poate folosi urmatoarea linie de cod:

Get #1, , recAbonat

Scrierea variabilelor in inregistrari

Pentru a scri o inregistrare intr-un fisier in acces aleator se foloseste instructiunea Put, a carei sintaxa este:

Put <nr.fisier>, <nr.art>], <variabila>

unde:

<nr.fisier>

Numarul de fisier care a fost asociat la deschiderea fisierului.

<nr.art>

Numarul articolului (expresie numerica de tip Long) care va fi scris. Daca nu se precizeaza aceasta valoare, se scrie in pozitia curenta, adica dupa ultima inregistrare citita sau scrisa.

<variabila>

Variabila din care sunt scrise datele (o variabila a unui tip de data definit de utilizator).

Spre exemplu, pentru scrierea continutului variabilei recAbonat de tip Persoana, declarate anterior, in inregistrareai cu numarul lPozitie se poate utiliza linie de cod urmatoare:

Put #1, lPozitie , recAbonat

Inlocuirea articolelor

Pentru a inlocui o inregistrare se foloseste o instructiune Put specificand pozitia (numarul de inregistrare) inregistrarii pe care vreti s-o inlocuiti. Spre exemplu, pentru a inlocui a 11-a inregistrare se va utiliza urmatoarea linie de cod:

Put #1, 11, recAbonat

Adaugarea de noi inregistrari

Pentru a adauga noi inregistrari la sfarsitul unui fisier deschis in acces aleator se folosec urmatoarele linii de cod:

lUltimArt = Lof(iNrFisier) / lLungArt + 1

Put #1, lUltimArt, recAbonat

Prima linie de cod determina numarul de inregistrari din fisier si-l majoreaza cu o unitate, pentru a putea scrie dupa ultima inregistrare din fisier. Functia Lof() determina lungimea, in bytes, a unui fisier deschis.

Stergerea    inregistrarilor

Inregistrarile dintr-un fisier deschis in acces aleator nu pot fi sterse; se poate doar goli campurile, inregistrarea ramanand in continuare in fisier. Totusi operatia de stergere se poate simula executand urmatoarele operatii:

Se deschide un nou fisier.

Din fisierul original se copiaza in noul fisier numai inregistrarile corecte.

Se inchid ambele fisiere.

Se sterge fisierul original folosind instructiunea Kill, a carei sinatxa este urmatoarea:

Kill <nume_fisier>

unde <nume_fisier> este o expresie sir de caractere care specifica numele fisierului ce se va sterge, putand include calea si unitatea unde se gaseste fisierul respectiv.

Se redenumeste noul fisier cu numele vechiului fisier folosind instructiunea Name, a carei sintaxa este urmatoarea:

Name <nume_fisier_vechi> As <nume_fisier_nou>

unde <nume_fisier_vechi> si <nume_fisier_nou> reprezinta numele vechiului fisier (putand include calea si unitatea unde se gaseste fisierul) si respectiv noul nume de fisier. Fisierul indicat prin <nume_fisier_nou> nu trebuie sa existe.

Cand prelucrati fisiere deschise in acces aleator trebuie sa respectati urmatoarele reguli:

Datele scrise in fisier cu instructiunea Put se citesc cu instructiunea Get.

Prima inregistrare dintr-un fisier deschis pentru acces aleator are <nr.art> egal cu 1, al doilea are <nr.art> egal cu 2, s.a.m.d. Daca in instructiunile Put sau Get omiteti <nr.art>, se scrie/citeste urmatoarea inregistrare dupa ultima prelucrata sau referita de catre ultimul apel al functiei Seek(). Functia Seek() returneaza o valoare de tip Long care specifica pozitia curenta pentru scriere/citire a fisierului deschis in acces aleator cu instructiunea Open. Sintaxa instructiunii Seek() este:

Seek(<nr.fisier>

unde <nr.fisier> reprezinta numarul asociat fisierului la deschidere.

Pentru ca pe timpul prelucrarii fisierelor in acces aleator sa nu se produca erori neprevizibile, este indicat ca lungimea datelor citite/scrise in fisier sa corespunda cu lungimea specificata in clauza Len a instructiunii Open.

Deoarece lungimea reala a unei inregistrari depinde de tipul de date asociat campurilor din tipul definit de utilizator este indicat ca lungimea sa se determine nu prin insumarea spatiului necesar fiecarui camp, ci prin apelarea functiei LenB(), a carei sintaxa este:

LenB(<variabila>)

unde <variabila> reprezinta numele variabilei ce contine sau va contine datele scrise respectiv citite in/din fisier.

Daca <variabila> ce se scrie/citeste este un sir de lungime variabila, datele sirului sunt precedate de un descriptor de 2 bytes ce contine lungimea sirului. Deci lungimea inregistrarii specificata in clauza Len din instructiunea Open trebuie sa fie cu cel putin 2 bytes mai mare de cat lungimea reala a sirului.

Daca <variabila> ce se scrie/citeste este un tablou dinamic, la numarul total de bytes necesar tabloului se adauga un descriptor a carui lungime este egala cu 2 plus de 8 ori numarul dimensiunilor tabloului. Spre exemplu, urmatoarea declaratie de tablou necesita 118 bytes atunci cand tabloul este scris intr-un fisier:

Dim MyArray(1 To 5,1 To 10) As Integer

Cei 118 bytes sunt distribuiti astfel: 18 bytes pentru descriptor (2 + 8 * 2; tabloul are doua dimensiuni) si 100 bytes pentru date (5 * 10 * 2; cinci linii, fiecare cu 10 coloane de intregi).

Lungimea inregistrarii specificata in clauza Len din instructiunea Open trebuie sa fie mai mare sau cel putin egala cu suma tuturor bytes necesari citirii/scrierii datelor tabloului si a descriptorului de tablou.

Tablourile de lungime fixa nu au un descriptor de tablou; deci in fisier vor exista numai datele tabloului.

Daca <variabila> este un Variant a tipului numeric, la numarul de bytes necesari stocarii datelor se mai adauga 2 bytes pentru pastrarea tipului (VarType) de numar. Spre exemplu, VarType este egal cu 3 pentru datele de tip Long. Deci lungimea inregistrarii specificata in clauza Len din instructiunea Open trebuie sa fie mai mare sau cel putin egala cu lungimea reala a inregistrarii plus 2 bytes.

Daca <variabila> apartine oricarui alt tip diferit de sir de lungime variabila, Variant sau tablou dinamic, in/din fisier se scriu/citesc numai datele. Deci lungimea inregistrarii specificata in clauza Len din instructiunea Open trebuie sa fie mai mare sau cel putin egala cu lungimea reala a inregistrarii.

Prelucrarea unitatilor, dosarelor si fisierelor

Cand programati in Windows, este foarte important sa aveti posibilitatea de a adauga, muta, schimba, crea sau sterge dosare/fisiere, de a obtine informatii despre unitati si de a le manipula.

Visual Basic va permite sa procesati unitatile, dosarele si fisierele in doua moduri diferite: folosind metodele traditionale cum ar fi instructiunile Open, Write # etc. si prin intermediul unui nou set de instrumente - modelul obiectului File System Object (FSO).

Modelul obiectului FSO ofera aplicatiilor posibilitatea de a crea, modifica, muta si sterge dosare sau de a detecta daca anumite dosare exista si daca da unde se gasesc ele. De asemenea, puteti obtine informatii despre dosare, cum ar fi numele acestora, data cand au fost create etc.

De asemenea, modelul obiectului FSO usureaza procesarea fisierelor. Cand procesati fisiere, principalul obiectiv al dumneavoastra este stocarea datelor intr-un spatiu eficient si intr-un format usor de accesat. De asemenea, aveti nevoie de posibilitati de creare a fisierelor, de inserare si modificare a datelor si de citirea datelor. Puteti stoca datele intr-o baza de date, cum ar fi Jet sau SQL, dar aceasta va adauga o suprasarcina semnificativa aplicatiei. Din mai multe motive, este posibil sa nu doriti sa aveti o asemena durere de cap sau accesul la date necesar nu impune folosirea tuturor facilitatilor bazelor de date. In acest caz, stocarea datelor intr-un fisier text sau binar este cea mai eficienta solutie.

Modelul obiectului FSO admite crearea si manipularea fisierelor text prin intermediul obiectului TextStream. Obiectul TextStream nu manipuleaza fisiere binare; acestea vor fi create si manipulate folosind instructiunile traditionale pentru fisiere.

Obiectele modelului FSO

Modelul obiectului FSO are urmatoarele obiecte:

Obiect

Descriere

Drive

Permite culegerea de informatii despre unitatile atasate sistemului, cum ar fi cat spatiu este disponibil, care este numele partajat al acestora etc. Prin "unitate" nu se intelege in mod obligatoriu un hard-disc. Aceasta poate fi o unitate CD-ROM, un disc RAM etc. De asemenea, nu este necesar ca unitatile sa fie fizic atasate sistemului; ele pot fi conectate logic prin intermediul unui LAN (Local Area Network - retea locala de calculatoare).

Folder

Permte crearea, stergerea sau mutarea dosarelor, precum si interogarea sistemului despre caracteristicile acestora: nume, cale etc.

Files

Permite crearea, stergerea si mutarea fisierelor, precum si interogarea sistemului despre caracteristicile acestora: nume, cale etc.

FileSystemObject

Este principalul obiect al grupului si contine metodele care permit crearea, stergerea, obtinerea de informatii si in general manipularea unitatilor, fisierelor si dosarelor. Multe dintre metodele acestui obiect le duplica pe cele ale altor obiecte.

TextStream

Va ofera posibilitatea sa cititi si sa scrieti fisiere text.

Programarea in modelul obiectului FSO

Programarea in modelul obiectului FSO implica trei etape principale:

Utilizarea metodei CreateObject sau declararea unei variabile de tip FileSystemObject pentru a crea un nou obiect.

Utilizarea uneia dintre metodele obiectului nou creat.

Accesarea proprietatilor obiectului.

Modelul obiectului FSO este continut intr-o biblioteca de tip numita Scripting, aflata in fisierul Scrrun.Dll. Daca nu aveti o referinta la aceasta biblioteca, selectati caseta de validare a optiunii 'Microsoft Scripting Runtime' din caseta de dialog References (se afiseaza selectand comanda References din meniul Project). Folosind fereastra Object Browser puteti vizualiza obiectele, colectiile, proprietatile, metodele si evenimentele obiectului FSO, precum si constantele acestuia.

Crearea si utilizarea obiectului FileSystemObject

Pentru a crea un obiect FileSystemObject puteti folosi una din urmatoarele procedee:

Declarand o variabila a obiectului FileSystemObject, ca in aceasta linie de cod:

Dim fso As New FileSystemObject

Folosind metoda CreateObject, ca in urmatoarea linie de cod:

Set fso = CreateObject('Scripting.FileSystemObject')

unde: Scripting este numele bibliotecii de tip, FileSystemObject este numele obiectului pentru care vreti sa creati o instanta.

Nota Primul procedeu lucreaza numai in Visual Basic, in timp ce al doilea procedeu lucreaza atat in Visual Basic cat si in VBScript.

Urmatorul pas este folosirea uneia dintre metodele obiectului FileSystemObject. Spre exemplu, daca vreti sa creati un nou obiect, puteti folosi metoda CreateFolder sau CreateTextFile (modelul obiectului FSO nu admite crearea sau stergerea unitatilor)

Daca vreti sa stergeti obiectele, puteti folosi metodele DeleteFile si DeleteFolder ale obiectului FileSystemObject sau metoda Delete a obiectelor File si Folder.

Utilizand metodele corespunzatoare, puteti copia si muta fisiere sau dosare.

Unele functionalitati ale modelului obiectului FileSystemObject sunt redundante. Spre exemplu, puteti copia un fisier fie folosind metoda CopyFile a obiectului FileSystemObject sau metoda Copy a obiectului File object. Ambele metode lucreaza la fel. Ele exista pentru a oferi o mai mare flexibilitate programarii.

Pentru a accesa o unitate, un dosar sau un fisier existent trebuie sa folositi una din metodele "get" ale obiectului FileSystemObject: GetDrive GetFolder sau GetFile

Spre exmplu:

Dim fso As New FileSystemObject, fil As File

Set fil = fso.GetFile('c:test.txt')

De remarcat ca, totusi, nu este necesar sa folositi metodele 'get' pentru obiectele nou create, deoarece functiile de creare returneaza deja o cale de acces la aceste obiecte. Spre exemplu, daca creati un nou dosar folosind metoda CreateFolder, nu trebuie sa folositi apoi metoda GetFolder pentru a accesa proprietatile acestuia, cum ar fi Name, Path, Size etc. Trebuie doar sa setati o variabila la functia CreateFolder pentru a obtine o cale de acces la noul dosar creat, apoi puteti accesa proprietatile, metodele si evenimentele acestuia:

Private Sub Create_Folder()

Dim fso As New FileSystemObject, fldr As Folder

Set fldr = fso.CreateFolder('C:MyTest')

MsgBox 'Dosarul creat se numeste: ' & fldr.Name

End Sub

Din momentul in care aveti o cale de acces la un obiect, puteti folosi proprietatile lui. Spre exemplu, sa presupunem ca vreti sa obtineti numele unui anumit dosar. In primul rand creati o instanta a obiectului, apoi obtineti o cale de acces la acesta cu metoda potrivita (in acest caz, metoda GetFolder, deoarece dosarul deja exista):

Set fldr = fso.GetFolder('c:')

Dupa ce ati obtinut calea de acces la un obiect Folder, puteti verifica proprietatea Name a acestuia:

Debug.Print 'Numele dosarului este: '; fldr.Name

Daca vreti sa vedeti cand a fost modificat un fisier, folositi urmatoarele linii de cod:

Dim fso As New FileSystemObject, fil As File

Set fil = fso.GetFile('c:detlog.txt') ' Obtinerea obiectului File dorit

Debug.Print 'Ultima modificare: '; fil.DateLastModified ' Afisarea datei

Lucrul cu unitati si dosare

Folosind modelul obiectului FSO puteti lucra cu unitatile si dosarele in mod programatic la fel cu o faceti interactiv in Windows Explorer.

Obtinerea informatiilor despre unitati

Obiectul Drive va permite sa obtineti informatii despre diferitele unitati atasate sistemului fie fizic, fie printr-o retea de calculatoare. Proprietatile acestui obiect va permit sa obtineti urmatoarele informatii:

Spatiul total al unitatii, in bytes (proprietatea TotalSize)

Spatiul disponibil pe unitate, in bytes (proprietatile AvailableSpace sau FreeSpace)

Ce litera este asignata unitatii (proprietatea DriveLetter)

Ce tip de unitate este, cum ar fi: amovibila, fixa, retea, CD-ROM sau disc RAM (proprietatea DriveType)

Numarul de serie al unitatii (proprietatea SerialNumber)

Tipul de sistem folosit de unitate, cum ar fi FAT, FAT32, NTFS etc. (proprietatea FileSystem)

Daca o unitate este disponibila pentru utilizare (proprietatea IsReady)

Numele de partajare si/sau a volumului (proprietatile ShareName si VolumeName)

Calea sau dosarul radacina al unitatii (proprietatile Path si RootFolder)

Exemplu de folosire a obiectului Drive

Urmatorul exemplu prezinta modul de folosire a obiectului Drive pentru culegerea informatiilor despre o unitate. In acest cod nu veti bedea o referinta la un obiect Drive real, in schimb, veti folosi metoda GetDrive pentru a obtine o referinta la un obiect Drive existent (in acest caz, drv):

Private Sub Command3_Click()

Dim fso As New FileSystemObject, drv As Drive, s As String

Set drv = fso.GetDrive(fso.GetDriveName('c:'))

s = 'Unitatea ' & UCase('c:') & ' - ' & drv.VolumeName & vbCrLf

s = s & 'Spatiul total: ' & FormatNumber(drv.TotalSize / 1024, 0)

s = s & ' Kb' & vbCrLf & 'Spatiul liber: '

s = s & FormatNumber(drv.FreeSpace / 1024, 0) & ' Kb' & vbCrLf

MsgBox s

End Sub

Lucru cu dosare

Tabelul urmator prezinta cele mai des folosite operatii cu dosarele si metodele necesare acestora:

Operatia

Metoda

Crearea unui dosar

FileSystemObject.CreateFolder

Stergerea unui dosar

Folder.Delete sau FileSystemObject.DeleteFolder

Mutarea unui dosar

Folder.Move sau FileSystemObject.MoveFolder

Copierea unui dosar

Folder.Copy sau FileSystemObject.CopyFolder

Obtinerea numelui unui dosar

Folder.Name

Determinare existentei unui dosar pe o unitate

FileSystemObject.FolderExists

Obtinerea unei instante la un obiect Folder existent

FileSystemObject.GetFolder

Gasirea numelui dosarului parinte al unui dosar

FileSystemObject.GetParentFolderName

Gasirea caii dosarelor sistemului

FileSystemObject.GetSpecialFolder

Exemplu

Acest exemplu ilustreaza utilizarea obiectelor Folder si FileSystemObject pentru manipularea dosarelor si obtinerea informatiilor despre ele:

Private Sub Command10_Click()

' Get instance of FileSystemObject.

Dim fso As New FileSystemObject, fldr As Folder, s As String

Set fldr = fso.GetFolder('c:') ' Obtinerea obiectului Drive.

Debug.Print 'Numele dosarul parinte este: ' & fldr

Debug.Print 'Continut de unitatea ' & fldr.Drive

If fldr.IsRootFolder = True Then ' Afsarea numelui radacinii.

Debug.Print 'Acest dosar este dosar radacina.'

Else

Debug.Print ' Acest dosar nu este dosar radacina.'

End If

' Crearea unui nou dosar folosind obiectul FileSystemObject.

fso.CreateFolder ('c:Bogdan')

Debug.Print 'Created folder C:Bogdan'

' Afisarea numelui de baza al dosarului.

Debug.Print 'Numele de baza = ' & fso.GetBaseName('c:Bogdan')

fso.DeleteFolder ('c:Bogdan') ' Stergerea noului dosar creat

Debug.Print 'S-a sters dosarul C:Bogdan'

End Sub

Lucrul cu fisiere

In Visual Basic puteti lucra cu fisiere folosind noile obiecte orientate FSO cum ar fi Copy, Delete, Move si OpenAsTextStream, impreuna cu altele sau prin folosirea vechilor functii si instructiuni existente cum ar fi Open, Close, FileCopy, GetAttr etc. De retinut ca puteti muta, copia sau sterge fisiere indiferent de tipul acestora.

Exista doua mari categorii de manipulari ale fisierelor:

Crearea, adaugarea sau eliminarea datelor si citirea fisierelor

Mutarea, copierea si stergerea fisierelor

Crearea fisierelor

Exista trei cai de a crea un fisier de text secvential (referit uneori ca 'text stream'). Una dintre cai se bazeaza pe utilizarea metodei CreateTextFile. Pentru a crea un fisier de text gol se folosesc urmatoarele linii de cod:

Dim fso As New FileSystemObject, fil As File

Set fil = fso.CreateTextFile('c:testfile.txt', True)

Nota Modelul obiectului FSO nu suporta inca crearea fisierelor cu acces direct sau binare. Pentru a crea fisiere in acces direct sau binare se folosesc instructiunile de prelucrare a fisierelor clasice.

O a doua cale de creare este utilizarea metodei OpenTextFile a obiectului FileSystemObject avand indicatorul ForWriting setat:

Dim fso As New FileSystemObject, ts As New TextStream

Set ts = fso.OpenTextFile('c:test.txt', ForWriting)

Cea de a treia cale de creare consta in utilizarea metodei OpenAsTextStream avand indicatorul ForWriting setat:

Dim fso As New FileSystemObject, fil As File, ts As TextStream

Set fso = CreateObject('Scripting.FileSystemObject')

fso.CreateTextFile ('test1.txt')

Set fil = fso.GetFile('test1.txt')

Set ts = fil.OpenAsTextStream(ForWriting)

Adaugarea datelor in fisier

Dupa ce fisierul text a fost creat, puteti adauga date in el executand urmatoarele operatii:

Deschiderea fisierului text pentru scrierea datelor. Pentru deschiderea fisierului puteti utiliza fie metoda OpenAsTextStream al obiectului File fie metoda OpenTextFile a obiectului FileSystemObject.

Scrierea datelor. Pentru a scrie date intr-un fisier text se folosesc metodele Write sau WriteLine ale obiectului TextStream. Diferenta dintre Write si WriteLine consta in faptul ca WriteLine adauga caracterele de linie noua la sfarsitul sirului specificat. Daca vreti sa adaugati o linie goala in fisierul text, folositi metoda WriteBlankLines.

Inchiderea fisierului. Pentru inchiderea unui fisier, se foloseste metoda Close a obiectului TextStream.

In continuare se prezinta un exemplu de prelucrare a unui fisier text:

Sub Create_File()

Dim fso, txtfile

Set fso = CreateObject('Scripting.FileSystemObject')

Set txtfile = fso.CreateTextFile('c:testfile.txt', True)

txtfile.Write ('Acesta este un test. ') ' Scrie o linie

' Scriera unei linii de caractere

txtfile.WriteLine('Testare 1, 2, 3.')

' Scrierea a trei linii goale

txtfile.WriteBlankLines(3)

txtfile.Close

End Sub

Citirea fisierelor

Pentru a citi datele dintr-un fisier text, se folosesc metodele Read, ReadLine sau ReadAll ale obiectului TextStream:

Sarcina

Metoda

Citirea unui numar specificat de caractere dintr-un fisier

Read

Citirea unei linii intregi (pana la caracterul linie noua, dar fara sa le includa)

ReadLine

Citirea intregului continut al unui fisier text

ReadAll

Daca folositi metoda Read sau ReadLine si vreti sa sariti peste o anumita portiune de date, puteti folosi metoda Skip sau SkipLine.

Textul rezultat in urma utilizari unei metode de citire este stocat intr-un sir ce poate fi afisat intr-un control, analizat prin operatorii de siruri (cum ar fi, Left, Right si Mid), concatenat etc.

Nota Constanta vbNewLine contine un caracter sau caractere (in functie de sistemul de operare) pentru avansul cursorului la inceputul liniei urmatoare (carriage return -linefeed)..

Exemplu

Sub Read_Files()

Dim fso As New FileSystemObject, txtfile, _

fil1 As File, ts As TextStream

Set txtfile = fso.CreateTextFile('c:testfile.txt', True)

MsgBox 'Scrierea fisierului', vbCritical

Set fil1 = fso.GetFile('c:testfile.txt') ' Scrierea unei linii.

Set ts = fil1.OpenAsTextStream(ForWriting)

ts.Write 'Hello World'

ts.Close

' Citirea continutului fisierului.

Set ts = fil1.OpenAsTextStream(ForReading)

s = ts.ReadLine

MsgBox s

ts.Close

End Sub

Mutarea, copierea si stergerea fisierelor

Modelul obiectului FSO are cate doua metode pentru mutarea, copierea si stergerea fisierelor:

Sarcina

Metoda

Mutarea unui fisier

File.Move sau FileSystemObject.MoveFile

Copierea unui fisier

File.Copy sau FileSystemObject.CopyFile

Stergerea unui fisier

File.Delete sau FileSystemObject.DeleteFile

Exemplu

Urmatorul exemplu creaza un fisier text in directorul radacina a unitatii C, scrie cateva informatii in el, il muta intr-un director numit tmp, realizeaza o copie intr-un director numit temp si sterge copiile din ambele directoare. Pentru a rula acest exemplu, asigurati-va ca exista cele doua directoare numite tmp si temp in directorul radacina a unitatii C.

Sub Manip_Files()

Dim fso as New FileSystemObject, txtfile, fil1, fil2

Set txtfile = fso.CreateTextFile('c:test.txt', True)

MsgBox 'Scrierea fisierului'

txtfile.Write ('Acesta este un test.') ' Screrea unei linii.

txtfile.Close ' Inchidere fisierului.

MsgBox 'Mutarea fisierului in c:tmp', vbCritical

' Obtinerea unei cai de acces la radacina unitatii C:.

Set fil1 = fso.GetFile('c:test.txt')

fil1.Move ('c:tmptest.txt') ' Mutare in directorul tmp.

MsgBox 'Copierea fisierului in c:temp', vbCritical

fil1.Copy ('c:temptest.txt') ' Copierea fisierului in temp

MsgBox 'Stergerea fisierelor'

' Obtinerea cailor de acces la locatiile curente ale fisierelor.

Set fil1 = fso.GetFile('c:tmptest.txt')

Set fil2 = fso.GetFile('c:temptest.txt')

fil1.Delete ' Stergerea fisierelor.

fil2.Delete

MsgBox 'Asta-i tot!', vbCritical

End Sub





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate