Hantera och arbeta med textfiler via asp
Förord
Det är möjligt att öppna och läsa innehåll från en textfil placerad på webbservern. Det är också möjligt att skapa och skriva i samma textfil med ASP. Givetvis behöver vi kommandon för att utföra detta och med hjälp av en komponent som finns i Internet Information Server samt Personal WebbServer. Komponenten heter Scripting.FileSystemObject och finns som standard installerad på din webbserver. Den kan även hämtas hem från Microsofts hemsida tillsammans med massor av exempel samt manualer som finns tillgängliga för detta objekt.
Instansiera FSO
För er som inte känner till ordet Instansiera så betyder det ungefär att man startar och förbereder att använda en komponent - i detta fall en dll som finns installerad på webbservern. Genom att skriva objekt = Server.CreateObject("komponent") så aktiverar man komponenten och kan använda den med objektet. Objektet har i sin tur en eller flera funktioner som kan användas, objekt.Funktion ... Vi börjar med att instansiera FSO med följande kommando:
Set FSO = Server.CreateObject("scripting.FileSystemObject")
Därefter kan vi börja använda FSO genom att lägga till dess funktionsanrop, exempelvis OpenTextFile. I detta fall tilldelar vi ett nytt objekt för just .OpenFile.
Set Fil = FSO.OpenTextFile ("c:\test.fil")
Nu har vi öppnat filen och har fått objektet Fil som i sin tur har flera egenskaper, exempelvis ReadAll, Close mfl. Detta är den sista nivån och därför vill vi fånga innehållet, inte skapa ytterligare ett objekt - därför används inte SET som i så fall hade gett ett felmeddelande.
Innehall = Fil.ReadAll
Nu finns hela texten i variabeln Innehåll och du kan göra vad du vill med den, exempelvis skriva ut den på din sida med kommandot
Response.Write "Filens innehåll är:
"
Response.Write Innehåll
Nu skall vi stänga filen, frigöra objekten så de inte tar plats i internminnet och därefter är det klart
Fil.Close
Set Fil = Nothing
Set FSO = Nothing
Nu kan vi nog börja titta på de exempel som jag använder för att utföra vissa saker med textfiler. Avslutningsvis kan jag berätta att du lika väl kan använda dig av FSO i Visual Basic. Det gör att du faktiskt skulle kunna skriva en egen DLL med egna specialfunktioner som utför filhantering av olika specifika slag som passar just din webb-applikation.
Läs en textfil (ReadAll)
Först tänkte jag visa hur man gör för att instansiera FSO, därefter egenskapen .OpenTextFile för att kunna läsa ut innehållet från en textfil placerad på webbservern.
<%
set fs = Server.Createobject("scripting.FileSystemObject")
set rfile = fs.OpenTextFile("c:\laesfil.txt")
filecontent = rfile.ReadAll
rfile.close
set rfile = nothing
set fs = nothing
' skriv ut innehållet från filen i webbläsaren
response.write(filecontent)
%>
Innehållet i filen kommer att visas under förutsättning att filen finns i aktuell katalog. Om den inte finns kommer ett fel erhållas. För att läsa in innehållet från textfilen använder du .readAll funktionen. När du läst in textmassan så kan du använda response.write metoden.
Skriv till textfil (Write)
Denna programkod visar hur du öppnar en textfik och skriver till den. Om filen redan finns kommer den att skrivas över och det anger du med true parametern när du instansierar objektet.
<%
mytext = "Denna text kommer skrivas till en textfil som skapas."
set fs = Server.createobject("scripting.FileSystemObject")
set wfile = fs.CreateTextFile("c:\skrivfil.txt",true)
wfile.write(mytext)
wfile.close
set wfile = nothing
set fs = nothing
response.write("Text skapad")
%>
Byt namn på fil (MoveFile)
Det finns ingen standardfunktion som heter RenameFile, men med funktionen MoveFile så kan du utföra samma sak genom att ange samma sökväg och filnamn på båda inparametrarna. Här visar jag ett sådant exempel.
<%
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.MoveFile "d:\test.txt", "d:\nytest.txt"
%>
Radera en fil (DeleteFile)
Om du vill radera en fil så använder du funktionen .DeleteFile. Här kan du även ange en valfri parameter om du skall tillåta att radera filen om den är read-only.
<%
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.DeleteFile("d:\test.txt", True)
%>
Kopiera en fil (CopyFile)
Om du vill kopiera en fil från en plats till en annan kan du använda följande exempel. Om tillägg kan du sätta parametern True om du vill att befintliga filer skall skrivas över.
<%
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.CopyFile("d:\*.txt", "d:\data\", True)
%>
Obs! Här finns ett problem som innebär att du får fel om du exempelvis försöker att skriva följande: FileSystemObject.CopyFile "c:\doc\*\R1???97.xls", "c:\tmp"
Kontrollera om fil finns (FileExists)
För att kontrollera om en fil finns kan du använda FileExists kommandot. Om filen finns så returneras True.
<%
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FileExists("mytextfile.txt") Then
Response.Write "mytextile.txt finns i aktuell katalog"
End If
If fso.FileExists(Server.Mappath("\mytextfile.txt")) Then
Response.Write "mytextile.txt finns i rootkatalogen på denna webbserver."
End If
If fso.FileExists("C:\mytextfile.txt") Then
Response.Write "mytextile.txt finns på C:\"
End If
%>
Hur gör man en besöksräknare?
Jag tänkte avsluta med ett exempel på hur man kan göra för att skriva en räknare för alla besök som görs. Jag använder FSO för att ha en textfil som håller reda på det antal vi skall öka för varje gång:
<%
Dim objFSO, objCountFile
Dim strCountFileName
Dim iCount
' Vi skapar en fil med Filnamnet som i detta fall blir din asp.sida är döpt till med skillnaden att den får prefixet .cnt
strCountFileName = Server.MapPath(Request.ServerVariables("SCRIPT_NAME") & ".cnt")
' Instansierar FSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
' Öppnar textfilen (1 = För läsning, True = skapa)
Set objCountFile = objFSO.OpenTextFile(strCountFileName, 1, True)
' Läs den aktuella raden
If Not objCountFile.AtEndOfStream Then
' Hämtar värdet till iCount
iCount = CLng(objCountFile.ReadAll)
Else
' Saknas filen, sätter vi iCount till 0
iCount = 0
End If
' Stäng filen
objCountFile.Close
Set objCountFile = Nothing
' Nu ökar vi räknaren med 1
iCount = iCount + 1
' Nu skriver vi över den gamla filen
Set objCountFile = objFSO.CreateTextFile(strCountFileName, True)
' och skriver vårt nya värde
objCountFile.Write iCount
' Stänger filen igen
objCountFile.Close
Set objCountFile = Nothing
' Frigör alla objekt från minnet
Set objFSO = Nothing
%>
När du nu kör detta program kommer exempelvis värdet 22 att hämtas, ökas med 1 och skriva tillbaka 23. Om du använder denna programsnutt som en includefil till alla dina sidor så kommer du att ha en besöksräknare på varenda sida vilket kan vara nyttigt för hemsideägaren, speciellt för att enkelt få veta vad som är mest läst respektive sämst .
Samtliga objekt för FSO kan du läsa mer om här:
(Obs, Microsoft har strukturerat om sin sida, därför är dessa länkar trasiga för tillfället) » BuildPath
» CopyFile
» CopyFolder
» CreateFolder
» CreateTextFile
» DeleteFile
» DeleteFolder
» DriveExists
» FileExists
» FolderExists
» GetAbsolutePathName
» GetBaseName
» GetDrive » GetDriveName
» GetExtensionName
» GetFile
» GetFileName
» GetFileVersion
» GetFolder
» GetParentFolderName
» GetSpecialFolder
» GetTempName
» MoveFile
» MoveFolder
» OpenTextFile
Summering
Nu har du kommit i kontakt med FSO (FileSystemObject) som kan användas för att hantera filer på en webbserver. För att läsa detaljerat om samtliga objekt så finns de på Microsofts hemsida. Betygsätt gärna artikeln här uppe till höger. Om fler av er gör detta kan jag få en bild av hurvida den är bra eller dålig så att jag vet om det är något som måste förbättras eller förtydligas.
/Pelle Johansson
0 Kommentarer