Come manipolare files sul server

di Daniele Bochicchio, in ASP - Basi,

Tramite l'oggetto Scripting.FileSystemObject é possibile accedere a qualsiasi file si trovi sul server su cui viene eseguito il codice ASP.
Quindi non solo i canonici file che sono inseriti nelle directories effettivamente mappate sotto il web server, ma qualsiasi file presente sul computer che fa da server, a patto di avere le dovute autorizzazioni per compiere un'operazione del genere.

Per accedere in lettura ad un file, servono solamente queste due righe di codice:

Set FileObject=CreateObject("Scripting.FileSystemObject")
Set InStream=FileObject.OpenTextFile(MyFile,tipo,true)

Naturalmente al posto di MyFile deve essere inserito il nome del file, digitando il suo percorso completo (tipo c:\tempo\prova.txt ) oppure facendolo mappare direttamente al server, nel caso il file in questione risieda in una delle directory accessibile al web server, tramite l'istruzione:

MyFile=Server.MapPath("/aspoint/prova.txt")

che in questo caso indica al server di mappare (cioé tradurre nel corrispondente reale) l'indirizzo della virtual directory "/aspoint", dando come risultato una cosa come "c:\web\ospiti\aspoint\".
A questo punto, però, siamo solo all'inizio. Infatti abbiamo un altro parametro da specificare, la variabile tipo , che va ad indicare allo script con quale metodo si intende aprire il file. Abbiamo a disposizione le seguenti opzioni: 1 apre in lettura, 2 apre in scrittura, 8 apre ed aggiunge in scrittura dopo la fine del file (appending).

Una volta specificate queste informazioni, i metodi usati per leggere o scrivere sul file appena aperto sono semplicissimi.
Per leggere una riga basta l'istruzione:

testo=InStream.ReadLine()
Se si ha bisogno di leggere tutto il file, si usa invece:

testo=InStream.ReadAll
Per far si che il contenuto del file letto non vada perso, é sempre meglio associare il valore ad una variabile (nel nostro caso la variabile "testo") che potrà essere facilmente manipolata in seguito a nostro piacimento.

testo=InStream.ReadLine()

va bene nel caso io debba leggere un numero prefissato di linee, ma se non sappiamo a priori quante linee possa contenere il mio file, possiamo utilizzare uno script come il seguente:

 Do While not InStream.AtEndOfStream
  testo=InStream.ReadLine
  Response.Write("
Il contenuto della linea é: "&testo)
loop

Naturalmente si possono fare tutte le modifiche necessarie per adattare lo script alle proprie esigenze.

Per saltare una linea, inoltre, l'istruzione é

InStream.SkipLine()

Creare un nuovo file

Per scrivere su un file, abbiamo due possibili strade: aggiungere il testo da scrivere in coda a quanto già contenuto nel file aperto, oppure scrivere su un file nuovo.

Nel primo caso, si usa lo stesso codice di cui sopra per inizializzare l'oggetto ed aprire il file, mentre per la scrittura basterà questo:

testo="prova testo"  
InStream.WriteLine(testo)

La sintassi va bene anche per il secondo caso, in cui cambia il tipo di inizializzazione del file, che sarà:

Set FileObject=CreateObject("Scripting.FileSystemObject")
Set OutStream=FileObject.CreateTextFile(MyFile,true)

in cui MyFile non cambia valore.
L'unica differenza sta nel nome che abbiamo dato all'oggetto che ci permette di accedere al nostro file, per cui per la scrittura useremo:

testo="prova testo"  
OutStream.WriteLine(testo)

data appunto la diversità nel nome dell'oggetto che usiamo come puntatore per il file.

E' sempre consigliabile, per liberare preziose risorse, chiudere i files, con l'istruzione:

OutStream.Close

E' da notare che prima di ogni metodo (quello che sta a destra del punto) é necessario inserire il nome dell'oggetto così come é stato creato tramite l'istruzione

Set oggetto =FileObject.OpenTextFile(MyFile,tipo,true)

o l'istruzione equivalente

Set oggetto =FileObject.CreateTextFile(MyFile,true)