117 messaggi dal 26 settembre 2001
Ciao a tutti,
in un'applicazione asp l'utente puà scegliere fra varie voci di un menu, tutte portano alla scrittura (di cose diverese)sullo stesso file.txt che si trova sul server.
Come posso gestire questa situazione?Se un utente sta scrivendo sul file e un altro prova ad entrare contemporaneamente per scrivere dovrebbe essere bloccato da un errore?
Possono essere conflitti?
Non me ne intendo assolutamente dei comportamenti in questi casi...
Per accedere al file uso:
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set OutStream=FileObject.OpenTextFile("percorsofile.txt",2,true)
Outstream.WriteLine(stringasd)
OutStream.Close
Set OutStream=Nothing
Set FileObject=Nothing


5 messaggi dal 06 giugno 2002
Penso convenga impostare una variabile application o su un database/file di testo che dica se qualcuno sta già scrivendo sul file.

11.886 messaggi dal 09 febbraio 2002
Contributi
Giustissimo, imposta una variabile application che indichi se qualcuno sta scrivendo. Quando il processo di scrittura è finito, la variabile si svuota.

while Application("scrittura") = "1"
'ripetiamo il ciclo finchè la variabile è = 1
'se cambia, vuol dire che chi stava scrivendo sul file, ha finito
a=1
wend

'Ora eseguiamo il tuo codice
Application.Lock
Application("scrittura")="1"
Application.Unlock
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set OutStream=FileObject.OpenTextFile("percorsofile.txt",2,true)
Outstream.WriteLine(stringasd)
OutStream.Close
Set OutStream=Nothing
Set FileObject=Nothing
Application.Lock
Application("scrittura")=""
Application.Unlock

-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
117 messaggi dal 26 settembre 2001
ok.
la prima parte di codice però dove devo inserirla?sempre nella pagina asp dove c'è il mio codice?
Se si ovviamente devo ripetere il codice in tutte le pagine in cui scrivo su file.txt.

ma se un utente prova ad accedere mentre l'applicazione è locked che succede?Ha solo un msg di errore?
Grazie!

11.886 messaggi dal 09 febbraio 2002
Contributi
Si si tutto il codice va riportato nella stessa pagina, e in tutte le pagine in cui intendi implementare la scrittura sul file (magari mettilo in un file incluso, così se devi far delle modifiche dovrai aggiornare solo un file).

Sinceramente non so dirti che cosa succede se si prova a scrivere una variabile application mentre è locked (si tratta di un millessimo di secondo... non sono mai riuscito a sperimentarlo) però credo che non succeda niente... semplicemente penso che la pagina continui a provare a scrivere quella variabile finchè non ci riesce, non credo che ti dia errore.

Immaginati questo codice come la fila che si fa davanti al bagno degli autogrill, quando il cosetto sulla maniglia dice "occupato" lo script non può far altro che aspettare che torni a "libero".

Anche un'altra cosa: se due o più pagine si mettono in attesa non so poi chi ha la precedenza nell'eseguire lo script... boh, comunque si tratta di frazioni di secondo, tutto funzionerà alla grande sta tranquilla.


-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
117 messaggi dal 26 settembre 2001
ah, quindi gli utenti non si accorgono di nulla?
cioè...se pippo apre la pagina asp pag1.asp che contiene lo script che scrive sul file e mentre sta scrivendo un altro utente apre la pagina pag2.asp che contiene un altro script che scrive sul file, quest'ultimo rimarrà in attesa come se lo script fosse più lento da eseguire?
Se è così' va benissimo.
..sono un po' tarda a volte!
...il fatto è che si tratta di stringhe molto importanti e se la loro scrittura non dovesse essere portata a termine ci sarebbero grossi problemi.L'altro giorno è successo, ma per fortuna mi sono accorta in tempo per cancellare e riscrivere tutto.Siccome non sono riuscita a acpire perchè sia successo questo disguido sto cercando di evitare ogni possibile problema.
Ora inizio a incorporare il codice che mi hai inviato.



11.886 messaggi dal 09 febbraio 2002
Contributi
Si si è così, lo script sembrerà solo un po' più lento, ma perchè è in attesa (si parla sempre di frazioni di secondo...).

Ma ora che mi ci fai pensare:
"L'altro giorno è successo, ma per fortuna mi sono accorta in tempo per cancellare e riscrivere tutto."

quando usi questa stringa:
Set OutStream=FileObject.OpenTextFile("percorsofile.txt",2,true)

non importa se il file "percorsofile.txt" esista o no, sia pieno o vuoto, viene comunque cancellato del tutto e riscritto da capo.
Quindi quando fai:
Outstream.WriteLine(stringasd)
vedrai che il file di testo conterrà solo quest'ultima riga, e non tutto quello che conteneva prima.

Prima di adesso dovevo aprire il file in lettura, copiarmi il contenuto, riaprire il file in scrittura e scrivere tutto compresi gli aggiornamenti. Ma facendo una ricerca e ho scoperto che si può aprire il file "for appending", per cui quello che devi modificare è solamente questa riga:
Set OutStream=FileObject.OpenTextFile("percorsofile.txt",2,true)
con
Set OutStream=FileObject.OpenTextFile("percorsofile.txt",8,true)

quel ,8 indica che dovranno essere aggiunte informazioni a quelle pre esistenti, fammi sapere se funziona...


-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
117 messaggi dal 26 settembre 2001
funziona tutto!
Grazie!

Approfitto per chiederti un'altra cosa, poi se mai apro una nuova discussione.
Come faccio a far si che quando un utente accede al sito compaia un' altra pagina html?Cioè un'altra finestra, più piccola...le ho viste in qualche sito...
praticamente su 'onload della pagina di defaul vorrei si aprisse una pagina dimensionabile.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.