Pagine ASP parte 2 La gestione dei file Stefano Schacherl
2 Esempio: un contatore di accessi L'utilizzo delle pagine ASP è quasi sempre basato sulla gestione dei File e dei DataBase. Prima di vederne in dettaglio le caratteristiche proviamo a realizzare un tipico esempio di applicazione, un contatore di accessi. Questo primo esempio si baserà su tre file: un file BENVENUTO.ASP (la pagina base) un file CONTATORE.INC (una pagina da includere che contiene Jscript) un file CONTEGGIO.TXT (contiene il numero di visitatori)
3 Esempio: un contatore di accessi Il file benvenuto.asp è la pagina che verrà richiamata dal client: Benvenuto! Benvenuto nel mio sito! Sei il visitatore numero In questa pagina c'è solo html, ma prevede l'inclusione di un file (contatore.inc) che contiene Jscript.
4 Esempio: un contatore di accessi Il file contatore.inc è quello che contiene tutto lo script: <% var n_file = Server.MapPath("conteggio.txt"); var fobj = new ActiveXObject("Scripting.FileSystemObject"); var file_in = fobj.OpenTextFile(n_file); var stringa = file_in.ReadLine(); file_in.Close(); var intero = parseInt(stringa); intero++; var file_out = fobj.CreateTextFile(n_file); file_out.WriteLine(intero); file_out.Close(); Response.Write(intero); %>
5 Esempio: un contatore di accessi Commenti: il metodo MapPath dell'oggetto Server fornisce una stringa con il nome (completo di path) del file ActiveXObject("Scripting.FileSystemObject") crea un oggetto ActiveX per la gestione dei file con OpenTextFile si apre il file con ReadLine() si legge una riga del file con Close() viene chiuso il file file_in con CreateTextFile si crea un nuovo file (stesso nome) con WriteLine si scrive una riga nel file Il file conteggio.txt deve contenere inizialmente il valore 0 e verrà automaticamente aggiornato.
6 ESERCITAZIONE Realizzare e provare il contatore di accessi.
7 Gli oggetti ActiveX L'istruzione var fobj = new ActiveXObject("Scripting.FileSystemObject"); è un esempio di come JScript riesce ad utilizzare gli oggetti ActiveX forniti dal server. La sintassi è quindi la seguente: var nomevar=new ActiveXObject("nomeserver.nometipo"); una volta creato l'oggetto nomevar in JScript, è possibile utilizzarne proprietà e metodi: nomevar.proprietà nomevar.metodo(parametri) L'oggetto ActiveX più utilizzato è proprio Scripting.FileSystemObject che consente di interagire con il File System del server.
8 Scripting.FileSystemObject I metodi di Scripting.FileSystemObject sono numerosi, tra questi: DriveExists (Restituisce un booleano che indica se il drive specificato esiste) GetDrive (Restituisce un oggetto Drive relativo all'unità di un percorso specificato) GetDriveName (Restituisce una stringa contenente il nome dell'unità di un percorso specificato)
9 Scripting.FileSystemObject CopyFolder (Copia una cartella da una posizione ad un'altra) CreateFolder (Genera una nuova cartella) DeleteFolder (Cancella una cartella) MoveFolder (Sposta una cartella) GetFolder (Restituisce un oggetto Folder relativo al percorso specificato) FolderExists (Restituisce un booleano che indica se la cartella specificata esiste)
10 Scripting.FileSystemObject CopyFile (Copia uno o più file da una posizione ad un'altra) DeleteFile (Cancella un file) FileExists (Restituisce un booleano che indica se il file specificato esiste) MoveFile (Sposta uno o più file) CreateTextFile (Crea un file di testo e restituisce un oggetto TextStream utile per lavorare con il file creato) GetFile (Restituisce un oggetto File relativo al percorso specificato) OpenTextFile (Apre il file specificato e restituisce un oggetto TextStream che può essere utilizzato per leggere il file, scrivere nel file o aggiungere testo alla fine del file)
11 Scripting.FileSystemObject CreateTextFile e OpenTextFile sono i metodi più importanti per la gestione dei file di testo, in quanto restituiscono un oggetto di tipo TextStream, che consente la gestione sequenziale di un file di testo; la sintassi di OpenTextFile è la seguente: nvar = nogg.OpenTextFile(nfile[,modoIO[,crea[,form]]]); nogg = nome assegnato al new ActiveXObject nfile = nome (completo di path) del file modoIO = 1 (ForReading), 2 (ForWriting), 8 (ForAppending) crea = True / False (se non esiste lo crea o no) form = TristateTrue (Unicode) TristateFalse (ASCII) TristateUseDefault (predefinita)
12 Scripting.FileSystemObject La sintassi di CreateTextFile è la seguente: nvar = nogg.CreateTextFile(nfile[,sovrascr[,unicode]]); nogg = nome assegnato al new ActiveXObject nfile = nome (completo di path) del file sovrascr = True / False (se esiste lo sovrascrive o no) unicode = True / False (formato Unicode o ASCII)
13 Scripting.FileSystemObject OpenTextFile e CreateTextFile resituiscono un oggetto di tipo TextStream che possiede i seguenti metodi: Close(Chiude il file) Read (Accetta un parametro intero n, legge e restituisce quindi n caratteri dal file di testo) ReadAll (Legge l'intero contenuto del file e lo restituisce come stringa) ReadLine (Legge un'intera riga del file fino al carattere di "nuova riga" escluso e la restituisce come stringa) Skip (Accetta un parametro intero n, durante la lettura di un file salta n caratteri e posiziona lo stream sul carattere immediatamente successivo all'ultimo ignorato) SkipLine (Salta ed ignora un'intera riga del file)...
14 Scripting.FileSystemObject Write(Accetta un parametro intero str, scrive quindi il contenuto di str all'interno del file) WriteBlankLines (Accetta un parametro intero n, scrive quindi nel file n righe vuote) WriteLine (Accetta un parametro intero str, scrive quindi il contenuto di str all'interno del file e lo fa seguire da un carattere di "nuova riga")
15 Scripting.FileSystemObject Proprietà: AtEndOfLine (True se il puntatore dello stream è posizionato immediatamente prima dell'indicatore di fine di riga, restituisce false in caso contrario) AtEndOfStream (True se il puntatore dello stream è posizionato immediatamente prima dell'indicatore di fine file, restituisce false in caso contrario) Column (Restituisce il numero di colonna della posizione di carattere corrente del file) Line (Restituisce il numero di linea della posizione di carattere corrente del file)
16 Il metodo Server.MapPath L'oggetto built-in Server possiede alcuni metodi e proprietà importanti; per ora ne vediamo solo uno, il metodo MapPath, che serve per la gestione dei file. Abbiamo visto che il riferimento ai file deve avere il percorso assoluto; per evitare di dover scrivere l'intero percorso (con gravi problemi di portabilità, tra l'altro) si può usare questo metodo che restituisce una stringa con il percorso assoluto di un file o cartella. Quindi, ad esempio: nfile = Server.MapPath("file.txt")
17 Esempi Vediamo alcuni esempi di istruzioni per la gestione dei file; per creare un file di testo con una prova di scrittura: var fso = new ActiveXObject("Scripting.FileSystemObject") ; var text_stream = fso.CreateTextFile(Server.MapPath("prova.tx t")); text_stream.WriteLine("Prova di scrittura su file di testo"); text_stream.Close();
18 Esempi Per aprire in lettura un file di testo esistente: var fso = new ActiveXObject("Scripting.FileSystemObject"); var text-file = fso.OpenTextFile(Server.MapPath("prova.txt") ); Per leggerne una singola riga: riga = text-file.ReadLine(); Per controllare se il file è finito: while(!text-file.AtEndOfStream) { … }
19 ESERCITAZIONE/1 Realizzare una pagina ASP che crei un file di testo. Realizzare una pagina ASP che legga un file di testo e lo visualizzi. Realizzare una pagina ASP che crei un file di testo sulla base dei dati immessi da un modulo. (Utilizzare il programma di lettura per visualizzarne il contenuto) Realizzare una pagina ASP che aggiunga ad un file di testo (inizialmente vuoto) i dati immessi da un modulo. (Utilizzare il programma di lettura per visualizzarne il contenuto)
20 ESERCITAZIONE/2 Progetti proposti: GUESTBOOK FORUM SONDAGGIO GESTIONE PASSWORD UTENTI RUBRICA TELEFONICA / TEST a risposta multipla (con memorizzazione e visualizzazione punteggi)