Newsgroup: it.comp.lang.delphi
Titolo: LoadFromFile di una StringList da un file in sola lettura

Ciao a tutti,
in un mio programma devo caricare i dati di un file di testo, che è in rete,
in una StringList.
Inizialmente caricavo i dati con LoadFromFile, però se nel momento in cui io
caricavo i dati quel file era aperto da un altro utente, mi veniva segnalato
che il file non poteva essere aperto.
Al momento, visto che la modifica serve subito, ho risolto aprendo il file
di testo con FileMode impostato a 0 e facendo un classico ciclo di lettura
dal file di testo e caricamento dei dati nella StringList.
Qualcuno mi sa dire se c'è invece il modo di dire alla LoadFromFile di
caricare i dati anche se il file è vincolato?
Grazie, Mario
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

No non c'e' modo. Di default quando un file viene aperto vengono 
impostati i permessi di lettura/scrittura e, visto che è utilizzato da 
un altro, non lo puo' permettere.
Se poi puoi attendere che il file sia chiuso allora puoi utilizzare
GetLastError per controllare che il file non sia più utilizzato ed in 
particolare gli errori ERROR_SHARING_VIOLATION e ERROR_LOCK_VIOLATION
Ciao

Scusate, avevo sbagliato prima a fare la ricerca con google e non avevo
trovato niente :-((
Anche in questo caso, basta impostare FileMode a 0 prima di fare la
LoadFromFile



Ciao
Potresti postare due righe di esempio ?
grazie
GP 


const NomeFile:='H:\Pippo.Txt';
var Pippo:TStringList;
begin
      //Faccio in modo sia gestito "In sola lettura"
      FileMode:=0;
      Pippo:=TStringList.Create;
      Pippo.LoadFromFile(NomeFile);
      Pippo.Free;
End;



Ciao,
la cosa mi incuriosisce. Ho fatto alcuni controlli nei sorgenti del mio D6.
filemode è una variabile byte dichiarata dentro system.pas che viene usata 
nella funzione OpenFile della stessa unit. FileMode a più alto livello viene 
usata dalle classiche funzioni di gestione file, come in pascal.
TStringList.LoadFromFile per leggere il contenuto di un file si avvale di 
TFileStream che a sua volta utilizza FileOpen che a sua volta utilizza 
CreateFile, l'API di windows.
LoadFromFile crea l'istanza di TFileStream con le modalità fmOpenRead or 
fmSharedenywrite, ossia in lettura con divieto di accesso in scrittura.
Secondo me, se errore c'è, è quando qualcun altro processo allo stesso 
momento tenta di aprire quel determinato file in scrittura. Nessun problema 
dovrebbe esserci per una lettura contemporanea del file.
Così allo stesso modo se un altro processo ha occupato il file in 
FmOpenWrite or FmSharedenyread. In questo caso la lettura è inibita poiché 
qualcuno sta scrivendo nel file e il suo contenuto potrebbe subire 
variazioni.
Insomma, secondo me e secondo i sorgenti in mio possesso, FileMode con 
TStringList non c'entra nulla.
Ciao

 TStringList non c'entra nulla.
Purtroppo non sono così esperto, io ho preso esempio da questo link:
http://groups.google.it/group/it.comp.lang.delphi/browse_frm/thread/f5c0bc2906260a52/1f6c9399a6927937?lnk=st&q=%22sola+lettura%22+tstringlist&rnum=3&hl=it#1f6c9399a6927937
Ti posso solo dire che nel mio programma vado a leggere dei files di testo che
sono in rete e su cui lavorano anche i miei colleghi. Prima di fare la modifica
avevo degli errori in continuazione perché mi diceva che non aveva il permesso
per aprire i files (purtroppo non ho trascritto l'errore preciso).
Da quando ho fatto la modifica, tutto sta filando liscio.
Ciao, Mario