Professional Documents
Culture Documents
P O G L A V L J E
Sadr`aj
• Uvod u model objekata datote~nog sustava
• Programiranje u modelu FSO objekata
• Obrada datoteka starim naredbama i funkcijama
Model FSO objekata (model objekata datote~nog sustava) daje va{im aplikacijama
sposobnost stvaranja, mijenjanja, premje{tanja i brisanja mapa, ili otkrivanja postoji li
odre|ena mapa, te ako postoji, gdje. On vam tako|er omogu}uje dobivanje informacija
o mapama, kao {to su njihova imena, datum kad su stvorene ili posljednji put mije-
njane, i tako dalje.
Model FSO objekata ~ini tako|er puno lak{im obradu datoteka. Kad obra|ujete dato-
teke, va{ je prvi cilj spremiti podatke u lako pristupa~nom obliku djelotvornom kao
izvor i po zauze}u prostora. Trebate biti sposobni stvarati datoteke, ubacivati i mije-
njati podatke, i proizvoditi (~itati) podatke. Iako podatke mo`ete spremati u baze po-
dataka, kao baze tipa Jet ili SQL, to dodaje zna~ajnu koli~inu nadgradnje va{oj apli-
kaciji. Zbog puno razloga, ne}ete `eljeti takvu nadgradnju, ili zahtjevi pristupa va{im
podacima ne}e trebati sve dodatne osobine pridru`ene s potpuno opremljenom bazom
podataka. U tom slu~aju, spremanje va{ih podataka u binarnu ili tekstualnu datoteku je
naju~inkovitije rje{enje.
Model FSO objekata, koji je sadr`an u tipskoj biblioteci Scripting (Scrrun.dll), podr`a-
va stvaranje i upravljanje tekstualnom datotekom kroz objekt TextStream. Me|utim, za
sada ne podr`ava stvaranje ili upravljanje binarnim datotekama. Kako bi upravljali bi-
narnim datotekama, upotrijebite naredbu Open sa zastavicom Binary. Pune informacije
o upravljanju binarnim datotekama nalaze se u odlomku “Kori{tenje binarnog pristupa
datotekama”, kasnije u ovom poglavlju.
Sad kad imate hvataljku za objekt Folder, mo`ete provjeriti njegovo svojstvo Name:
Debug.Print “Ime mape je: “; mapa.Name
Ako `elite prona}i kad je datoteka posljednji put mijenjana, upotrijebite sljede}u
sintaksu:
Dim fso As New FileSystemObject, dato As File
‘ Dohvat objekta File za ispitivanje.
Set dato = fso.GetFile(“c:\detlog.txt”)
‘ Ispis informacije.
Debug.Print “Datoteka je mijenjana: “; fil.DateLastModified
Ako vi{e od jedne osobe mo`e otvoriti projekt na dijelu mre`e, varijabla DOS okru`e-
nja se mo`e upotrijebiti za omogu}avanje svakoj osobi da ima svoj vlastiti preslikani
dio:
#Const Debug = True
#If Debug Then
ChDrive Environ(“DIRMOGPROJEKTA”)
ChDir Environ(“DIRMOGPROJEKTA”)
#Else
On Error Resume Next
ChDrive App.Path
ChDir App.Path
# End If
Rad s mapama
Sljede}a popis pokazuje uobi~ajene poslove s mapama i postupke za njihovo ostvari-
vanje:
posao postupak
Stvaranje mape FileSystemObject.CreateFolder
Brisanje mape Folder.Delete ili FileSystemObject.DeleteFolder
Premje{tanje mape FolderMove ili FileSystemObject.MoveFolder
Kopiranje mape FolderCopy ili FileSystemObject.CopyFolder
Dohva}anje imena mape Folder.Name
Pronala`enje postoji li mapa na pogonu FileSystemObject.FolderExists
Dobivanje primjera postoje}eg objekta Folder FileSystemObject.GetFolder
Pronala`enje imena roditeljske mape FileSystemObject.GetParentFolderName
Pronala`enje staze sistemskih mapa FileSystemObject.GetSpecialFolder
Primjer
Ovaj primjer pokazuje upotrebu objekata Folder i FileSystemObject za upravljanje ma-
pama i dobivanje informacija o njima:
Private Sub Command0_Click()
‘ Dobivanje primjera objekta FileSystemObject.
Dim fso As New FileSystemObject, mapa As Folder, s As String
‘ Dobivanje objekta Drive.
Set mapa = fso.GetFolder(“c:”)
‘ Ispis imena roditeljske mape.
Debug.Print “Ime roditeljske mape je: “ & mapa
‘ Ispis imena pogona.
Debug.Print “Sadr`ana je na pogonu “ & mapa.Drive
‘ Ispis imena korijenske datoteke.
If mapa.IsRootFolder = True Then
Debug.Print “Ova mapa je korijenska mapa.”
Else
Debug.Print “ Ova mapa nije korijenska mapa.”
End If
‘ Stvaranje nove mape objektom FileSystemObject.
fso.CreateFolder (“c:\La`na”)
Debug.Print “Stvorena je mapa C:\La`na.”
‘ Ispis osnovnog imena mape.
Debug.Print “Osnovno ime = “ & fso.GetBaseName(“c:\La`na”)
‘ Brisanje novostvorene mape.
fso.DeleteFolder (“c:\La`na”)
Debug.Print “Obrisana je mapa C:\La`na.”
End Sub
Rad s datotekama
Mo`ete raditi s datotekama u Visual Basicu upotrebom novih objektno usmjerenih
FSO objekata, kao {to su Copy, Delete, Move i OpenAsTextStream, me|u ostalima, ili
upotrebom starijih postoje}ih funkcija kao {to su Open, Close, FileCopy, GetAttr i tako
dalje. Zapamtite da mo`ete premje{tati, kopirati i brisati datoteke neovisno o njihovom
tipu.
Za vi{e informacija o kori{tenju starijih postoje}ih funkcija, pogledajte odlomak
“Obrada datoteka starim naredbama i funkcijama” u ovom poglavlju. Ostatak ovog
dijela opisuje upotrebu novih FSO objekata, postupaka i svojstava za rad s datotekama.
Postoje dvije glavne kategorije upravljanja datotekama:
• Stvaranje, dodavanje ili brisanje podataka, i ~itanje datoteka
• Premje{tanje, kopiranje i brisanje datoteka
Primjer
Sub ^itanje_Datoteka()
Dim fso As New FileSystemObject, txtdatoteka, _
dat1 As File, ts As TextStream
Set txtdatoteka = fso.CreateTextFile(“c:\testdato.txt”, True)
MsgBox “Zapisivanje datoteke”
‘ Zapisivanje linije.
Set dat1 = fso.GetFile(“c:\testdato.txt”)
Set ts = dat1.OpenAsTextStream(ForWriting)
ts.Write “Pozdrav svijetu”
ts.Close
‘ ^itanje sadr`aja datoteke.
Set ts = dat1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
Primjer
Ovaj primjer stvara tekstualnu datoteku u korijenskom direktoriju pogona C, zapisuje
neke informacije u nju, premje{ta je u direktorij imena \tmp, stvara njezinu kopiju u
direktoriju imena \temp, te zatim bri{e kopije iz oba direktorija.
Kako bi izveli ovaj primjer, provjerite imate li direktorije s imenima \tmp i \temp u
korijenskom direktoriju pogona C:
Sub Upravljanje_datotekama()
Dim fso As New FileSystemObject, txtdatoteka, dat1, dat2
Set txtdatoteka = fso.CreateTextFile(“c:\testdato.txt”, True)
MsgBox “Zapisivanje datoteke”
‘ Zapisivanje linije.
txtdatoteka.Write(“Ovo je test.”)
‘ Zatvaranje datoteke za zapisivanje.
txtdatoteka.Close
MsgBox “Premje{tanje datoteke u c:\tmp”
‘ Dobivanje hvataljke za datoteku u korijenskom dir-u c:\.
Set dat1 = fso.GetFile(“c:\testdato.txt”)
‘ Premje{tanje datoteke u direktorij \tmp.
dat1.Move(“c:\tmp\testdato.txt”)
MsgBox “Kopiranje datoteke u c:\temp”
‘ Kopiranje datoteke u \temp.
dat1.Copy(“c:\temp\testdato.txt”)
Do Until EOF(BrojDato)
Line Input #BrojDato, Idu}aLinija
LinijeIzDato = LinijeIzDato + Idu}aLinija + Chr(13) + Chr(10)
Loop
Iako izraz Line Input # prepoznaje kraj linije kad do|e do oznake kraj-reda/novi-redak,
ne uklju~uje tu oznaku kad pro~ita liniju u varijablu. Ako `elite zadr`ati oznaku kraj-
reda/novi-redak, va{ kod ju mora dodati.
Mo`ete tako|er upotrijebiti naredbu Input #, koja ~ita popis izraza brojeva i/ili izraza
stringova zapisanih u datoteku. Na primjer, kako bi pro~itali liniju iz datoteke sa po-
{tanskom popisom, mogli bi upotrijebiti sljede}i izraz:
Input #BrojDato, ime, ulica, grad, dr`ava, po{broj
Funkciju Input mo`ete upotrijebiti za kopiranje bilo kojeg broja karaktera iz datoteke u
varijablu, pru`aju}i varijablu koja je dovoljno velika. Na primjer, sljede}i kod upotre-
bljava funkciju Input za kopiranje odre|enog broja karaktera u varijablu:
LinijeIzDato = Input(n, BrojDato)
Visual Basic tako|er podr`ava naredbu Write #, koja zapisuje popis izraza brojeva i/ili
izraza stringova u datoteku. Ova naredba automatski razdvaja svaki izraz zarezom i
postavlja znakove navodnika oko tekstualnih izraza:
Dim NekiString As String, NekiBroj As Integer
NekiString = “NekiKarakteri”
NekiBroj = 23445
Write #BrojDato, NekiString, NekiBroj
Ovaj dio koda zapisuje dva izraza u datoteku odre|enu podatkom BrojDato. Prvi izraz
sadr`i string, a drugi izraz sadr`i broj 23445. Stoga, Visual Basic zapisuje sljede}e
karaktere (uklju~uju}i sve znakove interpunkcije) u datoteku:
“NekiKarakteri”,23445
Odre|ivanje varijabli
Prije nego {to va{a aplikacija otvori datoteku za izravan pristup, treba odrediti sve vari-
jable potrebne za rukovanje podacima iz datoteke. To uklju~uje korisni~ki odre|ene
tipove, koji odgovaraju zapisima u datoteci, kao i standardne tipove za ostale varijable
koje sadr`e podatke koji se odnose na obra|ivanje datoteke otvorene za izravan pristup.
Titula As String * 15
Napomene As String * 150
End Type
Ako stvarni string sadr`i manje karaktera od nepromjenjive duljine tekstualnog ele-
menta u kojeg se zapisuje, Visual Basic preostala mjesta u zapisu popunjava karakteri-
ma razmaka (kod karaktera 32). Tako|er, ako je string dulji od veli~ine polja, vi{ak se
odrezuje. Ako upotrebljavate stringove duljine varijable, ukupna veli~ina svakog zapi-
sa spremljenog naredbom Put ili dohva}enog naredbom Get ne smije biti ve}a od
duljine zapisa odre|ene u dodatku Len naredbe Open.
U ovoj liniji koda, varijabla BrojDato sadr`i broj koji naredba Open koristi za otvara-
nje datoteke; varijabla Polo`aj sadr`i broj zapisa kojeg treba kopirati; a varijabla
Djelatnik, odre|ena kao korisni~ki odre|en tip Osoba, prihva}a sadr`aj zapisa.
Zamjena zapisa
Kako bi zamijenili zapise, upotrijebite naredbu Put, odre|uju}i polo`aj zapisa kojeg
`elite zamijeniti; na primjer:
Put #BrojDato, Polo`aj, Djelatnik
Ovaj kod }e zamijeniti zapis broja odre|enog varijablom Polo`aj, s podacima u vari-
jabli Djelatnik.
Dodavanje zapisa
Kako bi dodali nove zapise na kraj datoteke otvorene za izravan pristup, upotrijebite
naredbu Put na na~in prikazan u prethodnom dijelu koda. Postavite vrijednost varijable
Polo`aj tako da bude za jedan ve}a od broja zapisa u datoteci. Na primjer, kako bi
dodali zapis datoteci koja sadr`i pet zapisa, postavite varijablu Polo`aj na 6.
Brisanje zapisa
Mogli bi obrisati zapis ~i{}enjem njegovih polja, ali bi zapis i dalje postojao u datoteci.
Obi~no ne `elite prazne zapise u va{oj datoteci, jer tro{e prostor i dolaze u sukob sa
sekvencijalnim operacijama. Bolje je kopirati preostale zapise u novu datoteku, te
zatim obrisati staru datoteku.
Kako maknuti obrisani zapis iz datoteke za izravan pristup
1. Stvorite novu datoteku.
2. Kopirajte sve valjane zapise iz izvorne datoteke u novu datoteku.
3. Zatvorite izvornu datoteku i upotrijebite naredbu Kill kako bi ju obrisali.
4. Upotrijebite naredbu Name za primjenu imena nove datoteke u ime izvorne
datoteke.
Za vi{e informacija Za dodatne informacije o datotekama s izravnim pristupom,
pogledajte odlomak “Naredba Open” u priru~niku Microsoft Visual Basic 6.0
Language Reference.
Neovisno o stvarnom sadr`aju polja, svaki zapis u toj datoteci zauzima 209 bajtova.
Kori{tenjem binarnog pristupa mo`ete smanjiti upotrebu prostora na disku. Po{to takav
pristup ne zahtjeva polja nepromjenjive duljine, u odre|ivanju tipa mogu se izostaviti
parametri duljine stringova.
Type Osoba
ID As Integer
Mjese~naPla}a As Currency
DatumZadnjegPregleda As Long
Ime As String
Prezime As String
Titula As String
Napomene As String
End Type
Zapis svakog djelatnika u datoteci Podaci Djelatnika sada sprema samo to~an broj
potrebnih bajtova jer su polja duljine varijable. Lo{a strana binarnog ulaza/izlaza s
poljima duljine varijable je {to ne mo`ete izravno pristupiti zapisima – morate pristu-
pati zapisima po redu kako bi saznali duljinu svakog zapisa. Mo`ete izravno tra`iti
polo`aj odre|enog bajta u datoteci, ali nema izravnog na~ina da znate koji je zapis na
kojem polo`aju bajta ako su zapisi raznih duljina.
Za vi{e informacija Za dodatne informacije o datotekama sa binarnim pristupom,
pogledajte odlomak “Naredba Open” u priru~niku Microsoft Visual Basic 6.0
Language Reference.