FSO (File System Object) El Kitabı
File System Object (FSO), ASP'de dosya ve klasör işlemleri yapmak için kullanılan güçlü bir COM bileşenidir. Sunucu üzerinde dosya okuma, yazma, oluşturma, silme gibi işlemleri gerçekleştirebilirsiniz.
FSO Nedir?
FSO, Scripting.FileSystemObject COM nesnes olarak erişilebilen ve dosya sistemi üzerinde işlemler yapmanızı sağlayan bir bileşendir. Windows işletim sisteminde varsayılan olarak yüklüdür.
FSO Nesnesini Oluşturma
<%
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' İşlemlerinizi yapın...
Set fso = Nothing
%>Dosya İşlemleri
Dosya Okuma
<%
Dim fso, dosya, icerik
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' Dosya yolunu belirtin
Dim dosyaYolu
dosyaYolu = Server.MapPath("veriler/metin.txt")
' Dosyanın varlığını kontrol edin
If fso.FileExists(dosyaYolu) Then
' Dosyayı okuma modunda açın
Set dosya = fso.OpenTextFile(dosyaYolu, 1)
icerik = dosya.ReadAll
dosya.Close
Response.Write icerik
Else
Response.Write "Dosya bulunamadı!"
End If
Set dosya = Nothing
Set fso = Nothing
%>Dosya Yazma
<%
Dim fso, dosya
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Dim dosyaYolu
dosyaYolu = Server.MapPath("veriler/log.txt")
' Dosyayı yazma modunda açın (2 = yazma, 8 = ekleme)
Set dosya = fso.OpenTextFile(dosyaYolu, 8, True)
' Veri yazın
dosya.WriteLine Now() & " - Kullanıcı girişi yapıldı"
dosya.Close
Set dosya = Nothing
Set fso = Nothing
%>
Dosya Kopyalama ve Taşıma
<%
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' Dosya kopyalama
fso.CopyFile Server.MapPath("kaynak.txt"), Server.MapPath("hedef.txt")
' Dosya taşıma
fso.MoveFile Server.MapPath("eski_konum.txt"), Server.MapPath("yeni_konum.txt")
' Dosya silme
fso.DeleteFile Server.MapPath("silinecek.txt")
Set fso = Nothing
%>Klasör İşlemleri
Klasör Oluşturma ve Silme
<%
Dim fso, klasorYolu
Set fso = Server.CreateObject("Scripting.FileSystemObject")
klasorYolu = Server.MapPath("yeni_klasor")
' Klasör oluşturma
If Not fso.FolderExists(klasorYolu) Then
fso.CreateFolder klasorYolu
Response.Write "Klasör oluşturuldu"
End If
' Klasör silme
If fso.FolderExists(klasorYolu) Then
fso.DeleteFolder klasorYolu
Response.Write "Klasör silindi"
End If
Set fso = Nothing
%>Klasör İçeriğini Listeleme
<%
Dim fso, klasor, dosyalar, altKlasorler, item
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set klasor = fso.GetFolder(Server.MapPath("./"))
' Dosyaları listele
Set dosyalar = klasor.Files
Response.Write "<h3>Dosyalar:</h3><ul>"
For Each item In dosyalar
Response.Write "<li>" & item.Name & " (" & item.Size & " byte)</li>"
Next
Response.Write "</ul>"
' Alt klasörleri listele
Set altKlasorler = klasor.SubFolders
Response.Write "<h3>Klasörler:</h3><ul>"
For Each item In altKlasorler
Response.Write "<li>" & item.Name & "</li>"
Next
Response.Write "</ul>"
Set altKlasorler = Nothing
Set dosyalar = Nothing
Set klasor = Nothing
Set fso = Nothing
%>Drive Bilgileri
<%
Dim fso, surucu
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set surucu = fso.GetDrive("C:")
Response.Write "Sürücü: " & surucu.DriveLetter & "<br>"
Response.Write "Toplam Boyut: " & FormatNumber(surucu.TotalSize/1073741824, 2) & " GB<br>"
Response.Write "Boş Alan: " & FormatNumber(surucu.FreeSpace/1073741824, 2) & " GB<br>"
Response.Write "Dosya Sistemi: " & surucu.FileSystem & "<br>"
Set surucu = Nothing
Set fso = Nothing
%>
Güvenlik Uyarısı: FSO ile dosya işlemleri yaparken kullanıcı girdilerini direkt kullanmayın. Path traversal saldırılarına karşı dosya yollarını kontrol edin ve sadece belirlediğiniz klasörlerde işlem yapın.
Pratik Örnekler
Sayaç (Counter) Uygulaması
<%
Function SayacOku()
Dim fso, dosya, sayi
Set fso = Server.CreateObject("Scripting.FileSystemObject")
dosyaYolu = Server.MapPath("sayac.txt")
If fso.FileExists(dosyaYolu) Then
Set dosya = fso.OpenTextFile(dosyaYolu, 1)
sayi = CLng(dosya.ReadLine)
dosya.Close
Else
sayi = 0
End If
sayi = sayi + 1
Set dosya = fso.OpenTextFile(dosyaYolu, 2, True)
dosya.WriteLine sayi
dosya.Close
Set dosya = Nothing
Set fso = Nothing
SayacOku = sayi
End Function
Response.Write "Ziyaretçi Sayısı: " & SayacOku()
%>Log Dosyası Oluşturma
<%
Sub LogYaz(mesaj)
Dim fso, dosya, dosyaAdi
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' Günlük log dosyası
dosyaAdi = "log_" & Year(Now()) & Month(Now()) & Day(Now()) & ".txt"
dosyaYolu = Server.MapPath("logs/" & dosyaAdi)
Set dosya = fso.OpenTextFile(dosyaYolu, 8, True)
dosya.WriteLine Now() & " | " & Request.ServerVariables("REMOTE_ADDR") & " | " & mesaj
dosya.Close
Set dosya = Nothing
Set fso = Nothing
End Sub
' Kullanım
LogYaz "Kullanıcı giriş yaptı"
%>