Na predlog mladenovicz-a, a posto na forumu ima dosta pitanja vezanih za ovu temu postavljam ovaj topic za sve nejasnoce sa FSO-om.
File System Object - rad sa fajlovima i folderima
Zaključano
Zakačeno
Dok se ne odluči neko da napiše nešto, evo pomoći za FSO sa MSDN-a.
WSH malo detaljnije na ovoj stranici
U stvari, za Windows Script evo ovde zvanične dokumentacije u vidu fajla (1.36 MB) koji se skine pa lepo off-line proučavaš sve vezano za Windows skriptovanje.
Odnosno sve to gore i još ponešto može da se nađe na početnoj stanici za Windows Script.
WSH malo detaljnije na ovoj stranici
U stvari, za Windows Script evo ovde zvanične dokumentacije u vidu fajla (1.36 MB) koji se skine pa lepo off-line proučavaš sve vezano za Windows skriptovanje.
Odnosno sve to gore i još ponešto može da se nađe na početnoj stanici za Windows Script.
Potpis
Commercial-Free !!!
Da bi se koristio FileSystemObject potrebno je u References ukljuciti Microsoft Scripting Runtime (scrrun.dll).
FileSystemObject OBJEKTNI MODEL
(koristim Code tag jer je tako lepo formatirano :))
1. TextStream OBJEKAT
Kreira se metodoma FileSystemObjecta OpenTextFile ili CreateTextFile.
1.1. OpenTextFile
Otvara navedeni fajl, vraca TextStream objekat koji se moze koristiti za citanje ili pisanje u fajl.
object - FSO
filename - Naziv fajla
iomode - Opcioni parametar, input/output mode (ForReading=1, ForWriting=2, ForAppending=8)
create - Opcioni parametar tipa Boolean, indikator da li treba kreirati fajl ako ne postoji. Default vrednost je False
format - Opcioni parametar, predstavlja format fajla
TristateUseDefault=-2 koristi se system default
TristateTrue=-1 Unicode
TristateFalse=0 ASCII
Default vrednost je TristateFalse
1.2. CreateTextFile
Kreira fajl, vraca TextStream objekat koji se moze koristiti za citanje ili pisanje u fajl.
object - FileSystemObject ili Folder objekat.
filename - naziv fajla koji treba da bude kreiran
overwrite - Opcioni parametar, tipa Boolean, da li treba 'pregaziti' fajl ako postoji. Default False
unicode - Opcioni parametar, tipa Boolean, da li fajl kreirati kao Unicode (True) ili ASCII (False). Default False
TextStream PROPERTIES
AtEndOfLine - Boolean, Read Only, vraca True ako je fajl pointer pozicioniran na EOL (end-of-line) marker tj. na kraj linije. Moze se koristiti samo ako je TextStream fajl otvoren za citanje.
AtEndOfStream - Boolean, Read Only, vraca True ako je fajl pointer pozicioniran na kraj TextStream fajla. Moze se koristiti samo ako je TextStream fajl otvoren za citanje.
Column - Read Only, vraca redni broj kolone u kojoj se nalazi karakter na koji je pozicioniran fajl pointer
Line - Read Only, vraca redni broj linije fajla u kojoj se nalazi fajl pointer
TextStream METHODS
Close - zatvara otvoreni TextStream fajl
Read(characters) - cita odredjeni broj karaktera iz fajla i vraca odgovarajuci string
ReadAll - cita ceo fajl i vraca sadrzaj u jednom stringu
ReadLine - cita tekucu liniju iz fajla
Skip(characters) - preskace (ignorise) oderedjeni broj karaktrera iz fajla
SkipLine - preskace (ignorise) tekucu liniju u fajlu
Write(string) - upisuje string u fajl
WriteLine([string]) - upisuje string u fajl i oznaku za prelazak u novi red. Ako se string izostavi, upisuje oznaku za prelazak u novi red.
WriteBlankLines(lines) - upisuje odredjeni broj oznaka za prelazak u novi red (praznih linija)
PRIMERI:
1. Kod koji otvara fajl i upisuje u njega string (za dodavanje na kraj fajla koristiti ForAppending umesto ForWriting)
2. Citanje fajla karakter po karakter
3. Citanje fajla, liniju po liniju
Cini mi se da bi ovo moglo nekako lepse da se formatira ali ne znam kako, tako da ako moderatori misle da ovo moze lepse da izgleda, samo napred menjate.
Mislim da je ovo dovoljno za citanje/pisanje u fajl. Anyway, nastavice se :)
[Ovu poruku je menjao mladenovicz dana 02.09.2003. u 16:06 GMT]
FileSystemObject OBJEKTNI MODEL
(koristim Code tag jer je tako lepo formatirano :))
Code:
---------------------------------------------------------------------------------
OBJEKAT KOLEKCIJA OPIS
---------------------------------------------------------------------------------
Dictionary Top-level objekat. Slican VBA Collection objektu.
Drive Drives Predstavlja drajv/kolekciju drajvova.
File Files Predstavlja fajl/kolekciju fajlova.
FileSystemObject Top-level objekat. Koristi se za pristup i rad sa
drajvovima , folderima i fajlovima
Folder Folders Predstavlja folder/kolekciju foldera
TextStream Koristi se za rad sa tekstualnim fajlovima (read,
write, append)
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
OBJEKAT KOLEKCIJA OPIS
---------------------------------------------------------------------------------
Dictionary Top-level objekat. Slican VBA Collection objektu.
Drive Drives Predstavlja drajv/kolekciju drajvova.
File Files Predstavlja fajl/kolekciju fajlova.
FileSystemObject Top-level objekat. Koristi se za pristup i rad sa
drajvovima , folderima i fajlovima
Folder Folders Predstavlja folder/kolekciju foldera
TextStream Koristi se za rad sa tekstualnim fajlovima (read,
write, append)
---------------------------------------------------------------------------------
1. TextStream OBJEKAT
Kreira se metodoma FileSystemObjecta OpenTextFile ili CreateTextFile.
1.1. OpenTextFile
Otvara navedeni fajl, vraca TextStream objekat koji se moze koristiti za citanje ili pisanje u fajl.
Code:
object.OpenTextFile(filename[, iomode[, create[, format]]])
object.OpenTextFile(filename[, iomode[, create[, format]]])
object - FSO
filename - Naziv fajla
iomode - Opcioni parametar, input/output mode (ForReading=1, ForWriting=2, ForAppending=8)
create - Opcioni parametar tipa Boolean, indikator da li treba kreirati fajl ako ne postoji. Default vrednost je False
format - Opcioni parametar, predstavlja format fajla
TristateUseDefault=-2 koristi se system default
TristateTrue=-1 Unicode
TristateFalse=0 ASCII
Default vrednost je TristateFalse
1.2. CreateTextFile
Kreira fajl, vraca TextStream objekat koji se moze koristiti za citanje ili pisanje u fajl.
Code:
object.CreateTextFile(filename[, overwrite[, unicode]])
object.CreateTextFile(filename[, overwrite[, unicode]])
object - FileSystemObject ili Folder objekat.
filename - naziv fajla koji treba da bude kreiran
overwrite - Opcioni parametar, tipa Boolean, da li treba 'pregaziti' fajl ako postoji. Default False
unicode - Opcioni parametar, tipa Boolean, da li fajl kreirati kao Unicode (True) ili ASCII (False). Default False
TextStream PROPERTIES
AtEndOfLine - Boolean, Read Only, vraca True ako je fajl pointer pozicioniran na EOL (end-of-line) marker tj. na kraj linije. Moze se koristiti samo ako je TextStream fajl otvoren za citanje.
AtEndOfStream - Boolean, Read Only, vraca True ako je fajl pointer pozicioniran na kraj TextStream fajla. Moze se koristiti samo ako je TextStream fajl otvoren za citanje.
Column - Read Only, vraca redni broj kolone u kojoj se nalazi karakter na koji je pozicioniran fajl pointer
Line - Read Only, vraca redni broj linije fajla u kojoj se nalazi fajl pointer
TextStream METHODS
Close - zatvara otvoreni TextStream fajl
Read(characters) - cita odredjeni broj karaktera iz fajla i vraca odgovarajuci string
ReadAll - cita ceo fajl i vraca sadrzaj u jednom stringu
ReadLine - cita tekucu liniju iz fajla
Skip(characters) - preskace (ignorise) oderedjeni broj karaktrera iz fajla
SkipLine - preskace (ignorise) tekucu liniju u fajlu
Write(string) - upisuje string u fajl
WriteLine([string]) - upisuje string u fajl i oznaku za prelazak u novi red. Ako se string izostavi, upisuje oznaku za prelazak u novi red.
WriteBlankLines(lines) - upisuje odredjeni broj oznaka za prelazak u novi red (praznih linija)
PRIMERI:
1. Kod koji otvara fajl i upisuje u njega string (za dodavanje na kraj fajla koristiti ForAppending umesto ForWriting)
Code:
Dim oFSO As Scripting.FileSystemObject
Dim oTextStream As Scripting.TextStream
Set oFSO = New Scripting.FileSystemObject
Set oTextStream = oFSO.OpenTextFile("C:\test.txt", _
ForWriting, _
True, _
TristateFalse)
oTextStream.WriteLine ("JUHU")
oTextStream.Close
Set oTextStream = Nothing
Set oFSO = Nothing
Dim oFSO As Scripting.FileSystemObject
Dim oTextStream As Scripting.TextStream
Set oFSO = New Scripting.FileSystemObject
Set oTextStream = oFSO.OpenTextFile("C:\test.txt", _
ForWriting, _
True, _
TristateFalse)
oTextStream.WriteLine ("JUHU")
oTextStream.Close
Set oTextStream = Nothing
Set oFSO = Nothing
2. Citanje fajla karakter po karakter
Code:
Dim oFSO As Scripting.FileSystemObject
Dim oTextStream As Scripting.TextStream
Set oFSO = New Scripting.FileSystemObject
Set oTextStream = oFSO.OpenTextFile("C:\test.txt", _
ForReading, _
True, _
TristateFalse)
While Not oTextStream.AtEndOfStream
Debug.Print oTextStream.Read (1)
Wend
oTextStream.Close
Set oTextStream = Nothing
Set oFSO = Nothing
Dim oFSO As Scripting.FileSystemObject
Dim oTextStream As Scripting.TextStream
Set oFSO = New Scripting.FileSystemObject
Set oTextStream = oFSO.OpenTextFile("C:\test.txt", _
ForReading, _
True, _
TristateFalse)
While Not oTextStream.AtEndOfStream
Debug.Print oTextStream.Read (1)
Wend
oTextStream.Close
Set oTextStream = Nothing
Set oFSO = Nothing
3. Citanje fajla, liniju po liniju
Code:
Dim oFSO As Scripting.FileSystemObject
Dim oTextStream As Scripting.TextStream
Set oFSO = New Scripting.FileSystemObject
Set oTextStream = oFSO.OpenTextFile("C:\test.txt", _
ForReading, _
True, _
TristateFalse)
While Not oTextStream.AtEndOfStream
Debug.Print oTextStream.ReadLine
Wend
oTextStream.Close
Set oTextStream = Nothing
Set oFSO = Nothing
Dim oFSO As Scripting.FileSystemObject
Dim oTextStream As Scripting.TextStream
Set oFSO = New Scripting.FileSystemObject
Set oTextStream = oFSO.OpenTextFile("C:\test.txt", _
ForReading, _
True, _
TristateFalse)
While Not oTextStream.AtEndOfStream
Debug.Print oTextStream.ReadLine
Wend
oTextStream.Close
Set oTextStream = Nothing
Set oFSO = Nothing
Cini mi se da bi ovo moglo nekako lepse da se formatira ali ne znam kako, tako da ako moderatori misle da ovo moze lepse da izgleda, samo napred menjate.
Mislim da je ovo dovoljno za citanje/pisanje u fajl. Anyway, nastavice se :)
[Ovu poruku je menjao mladenovicz dana 02.09.2003. u 16:06 GMT]
Potpis
2. Drive OBJEKAT i Drives KOLEKCIJA
Drive objekat omogucava pristup informacijama o odredjenom drajvu. Drive objekat se dobija metodom GetDrive FileSystemObjecta ili pristupom itemu u kolekciji Drives. Posto se iz naziva propertya vidi sta taj property znaci, mislim da ih ne treba objasnjavati. Mozda bi trebalo izdvojiti IsReady property. IsReady property za removable i CD-ROM drajvove vraca True ako je medij unutra. Ovim propertyjem se moze ispitati da li je CD u CD-ROMu.
PRIMERI:
1. Sledeci kod ide kroz sve drajvove koji su prisutni na sistemu i ispisuje tip drajva i da li je drajv Ready.
2. sledeci kod ispisuje neke informacije o svim ready drajvovima na sistemu
3. koriscenje GetDrive metoda
Drive objekat omogucava pristup informacijama o odredjenom drajvu. Drive objekat se dobija metodom GetDrive FileSystemObjecta ili pristupom itemu u kolekciji Drives. Posto se iz naziva propertya vidi sta taj property znaci, mislim da ih ne treba objasnjavati. Mozda bi trebalo izdvojiti IsReady property. IsReady property za removable i CD-ROM drajvove vraca True ako je medij unutra. Ovim propertyjem se moze ispitati da li je CD u CD-ROMu.
PRIMERI:
1. Sledeci kod ide kroz sve drajvove koji su prisutni na sistemu i ispisuje tip drajva i da li je drajv Ready.
Code:
Dim oFSO As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim sType As String
Dim sMsg As String
Set oFSO = New Scripting.FileSystemObject
For Each oDrive In oFSO.Drives
Select Case oDrive.DriveType
Case 0: sType = "Unknown"
Case 1: sType = "Removable"
Case 2: sType = "Fixed"
Case 3: sType = "Network"
Case 4: sType = "CD-ROM"
Case 5: sType = "RAM Disk"
End Select
sMsg = "Drive " & oDrive.DriveLetter & ": - " & sType
If oDrive.IsReady Then
sMsg = sMsg & " - Drive is Ready."
Else
sMsg = sMsg & " - Drive is not Ready."
End If
Debug.Print sMsg
Next
Set oFSO = Nothing
Dim oFSO As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim sType As String
Dim sMsg As String
Set oFSO = New Scripting.FileSystemObject
For Each oDrive In oFSO.Drives
Select Case oDrive.DriveType
Case 0: sType = "Unknown"
Case 1: sType = "Removable"
Case 2: sType = "Fixed"
Case 3: sType = "Network"
Case 4: sType = "CD-ROM"
Case 5: sType = "RAM Disk"
End Select
sMsg = "Drive " & oDrive.DriveLetter & ": - " & sType
If oDrive.IsReady Then
sMsg = sMsg & " - Drive is Ready."
Else
sMsg = sMsg & " - Drive is not Ready."
End If
Debug.Print sMsg
Next
Set oFSO = Nothing
2. sledeci kod ispisuje neke informacije o svim ready drajvovima na sistemu
Code:
Dim oFSO As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim sType As String
Set oFSO = New Scripting.FileSystemObject
For Each oDrive In oFSO.Drives
If oDrive.IsReady Then
Debug.Print oDrive.DriveLetter, _
oDrive.VolumeName, _
oDrive.FileSystem, _
oDrive.TotalSize, _
oDrive.FreeSpace, _
oDrive.DriveType
End If
Next
Set oFSO = Nothing
Dim oFSO As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim sType As String
Set oFSO = New Scripting.FileSystemObject
For Each oDrive In oFSO.Drives
If oDrive.IsReady Then
Debug.Print oDrive.DriveLetter, _
oDrive.VolumeName, _
oDrive.FileSystem, _
oDrive.TotalSize, _
oDrive.FreeSpace, _
oDrive.DriveType
End If
Next
Set oFSO = Nothing
3. koriscenje GetDrive metoda
Code:
Private Sub m_ShowFreeSpace(drvPath)
Dim oFSO As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim sMsg As String
Set oFSO = New Scripting.FileSystemObject
Set oDrive = oFSO.GetDrive(oFSO.GetDriveName(drvPath))
sMsg = "Drive " & UCase(drvPath) & " - "
sMsg = sMsg & oDrive.VolumeName & vbCrLf
sMsg = sMsg & "Free Space: " & FormatNumber(oDrive.FreeSpace / 1024, 0)
sMsg = sMsg & " Kbytes"
Debug.Print sMsg
Set oDrive = Nothing
Set oFSO = Nothing
End Sub
Private Sub m_ShowFreeSpace(drvPath)
Dim oFSO As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim sMsg As String
Set oFSO = New Scripting.FileSystemObject
Set oDrive = oFSO.GetDrive(oFSO.GetDriveName(drvPath))
sMsg = "Drive " & UCase(drvPath) & " - "
sMsg = sMsg & oDrive.VolumeName & vbCrLf
sMsg = sMsg & "Free Space: " & FormatNumber(oDrive.FreeSpace / 1024, 0)
sMsg = sMsg & " Kbytes"
Debug.Print sMsg
Set oDrive = Nothing
Set oFSO = Nothing
End Sub
Potpis
3. Folder OBJEKAT i Folders KOLEKCIJA
Folder objekat se dobija metodom GetFolder FSOa i omogucava pristup informacijama o folderu, kao i osnovne operacije sa folderima tipa Copy, Delete, Move. Nazivi Propertyja i metoda su desckriptivni i mislim da ih ne treba objasnjavati.
PRIMERI:
1. Ispis svih subfoldera i fajlova u folderu
Folder objekat se dobija metodom GetFolder FSOa i omogucava pristup informacijama o folderu, kao i osnovne operacije sa folderima tipa Copy, Delete, Move. Nazivi Propertyja i metoda su desckriptivni i mislim da ih ne treba objasnjavati.
PRIMERI:
1. Ispis svih subfoldera i fajlova u folderu
Code:
Private Sub m_FolderInfo(folderspec)
Dim oFSO As Scripting.FileSystemObject
Dim oFolders As Scripting.Folders
Dim oFolder As Scripting.Folder
Dim oSubFolder As Scripting.Folder
Dim oFiles As Scripting.Files
Dim oFile As Scripting.File
Set oFSO = New Scripting.FileSystemObject
If Not oFSO.FolderExists(folderspec) Then
MsgBox "Path not found"
Exit Sub
End If
Set oFolder = oFSO.GetFolder(folderspec)
Set oFolders = oFolder.SubFolders
Debug.Print "SUBFOLDERS:"
For Each oSubFolder In oFolders
Debug.Print oSubFolder.Name, _
oSubFolder.DateCreated, _
oSubFolder.Size
Next
Set oFiles = oFolder.Files
Debug.Print "FILES:"
For Each oFile In oFiles
Debug.Print oFile.Name, _
oFile.DateCreated, _
oFile.Size, _
oFile.Type
Next
Set oFolders = Nothing
Set oFolder = Nothing
Set oFiles = Nothing
Set oFSO = Nothing
End Sub
Private Sub m_FolderInfo(folderspec)
Dim oFSO As Scripting.FileSystemObject
Dim oFolders As Scripting.Folders
Dim oFolder As Scripting.Folder
Dim oSubFolder As Scripting.Folder
Dim oFiles As Scripting.Files
Dim oFile As Scripting.File
Set oFSO = New Scripting.FileSystemObject
If Not oFSO.FolderExists(folderspec) Then
MsgBox "Path not found"
Exit Sub
End If
Set oFolder = oFSO.GetFolder(folderspec)
Set oFolders = oFolder.SubFolders
Debug.Print "SUBFOLDERS:"
For Each oSubFolder In oFolders
Debug.Print oSubFolder.Name, _
oSubFolder.DateCreated, _
oSubFolder.Size
Next
Set oFiles = oFolder.Files
Debug.Print "FILES:"
For Each oFile In oFiles
Debug.Print oFile.Name, _
oFile.DateCreated, _
oFile.Size, _
oFile.Type
Next
Set oFolders = Nothing
Set oFolder = Nothing
Set oFiles = Nothing
Set oFSO = Nothing
End Sub
Potpis
4. FileSystemObject
Top-level objekat, omogucava rad sa fajlovima, folderima i drajvovima.
Metode za rad sa folderima:
-CreateFolder
-CopyFolder
-DeleteFolder
-FolderExists
-GetFolder
-GetSpecialFolder - vraca specijalne foldere (WindowsFolder, SystemFolder, TemporaryFolder)
-GetTempName - vraca slucajno generisan naziv koji se moze koristiti za temporary folder
-GetParentFolderName
-MoveFolder
Metode za rad sa fajlovima
-CopyFile
-CreateTextFile
-DeleteFile
-FileExists
-GetFile
-GetExtensionName
-GetFileName
-GetFileVersion
-GetTempName
-MoveFile
-OpenTextFile
Metode za rad za drajvovima
-DriveExists
-GetDrive
-GetDriveName
-Drives property - (kolekcija postojecih drajvova)
Ostale metode
-BuildPath(path, name) - kreira putanju, tako sto na path nakaci name. Path separator ce biti dodat ako je potrebno
-GetAbsolutePathName - vraca apsolutnu putanju u odnosu na tekuci folder
-GetBaseName (GetBaseName("C:\My Music\DMyMusic") vrati DMyMusic)
Top-level objekat, omogucava rad sa fajlovima, folderima i drajvovima.
Metode za rad sa folderima:
-CreateFolder
-CopyFolder
-DeleteFolder
-FolderExists
-GetFolder
-GetSpecialFolder - vraca specijalne foldere (WindowsFolder, SystemFolder, TemporaryFolder)
-GetTempName - vraca slucajno generisan naziv koji se moze koristiti za temporary folder
-GetParentFolderName
-MoveFolder
Metode za rad sa fajlovima
-CopyFile
-CreateTextFile
-DeleteFile
-FileExists
-GetFile
-GetExtensionName
-GetFileName
-GetFileVersion
-GetTempName
-MoveFile
-OpenTextFile
Metode za rad za drajvovima
-DriveExists
-GetDrive
-GetDriveName
-Drives property - (kolekcija postojecih drajvova)
Ostale metode
-BuildPath(path, name) - kreira putanju, tako sto na path nakaci name. Path separator ce biti dodat ako je potrebno
-GetAbsolutePathName - vraca apsolutnu putanju u odnosu na tekuci folder
-GetBaseName (GetBaseName("C:\My Music\DMyMusic") vrati DMyMusic)