Newsgroup: it.comp.lang.delphi
Titolo: Sharing violation (i/o error 32)

Buongiorno a tutti! Il mio problema si pone quando faccio un append su
file di testo. Nonostante il file sia prima chiuso  con una close, se lo
riapro in append e filemode in scrittura\lettura, il programma si ferma su
questo i/o error 32 che da vecchie discussioni ho scoperto essere questa
sharing violation.
Premettendo che su questo file ci scrive un'unica applicazione, mi sembra
di capire che nonostante la close il file non sia realmente chiuso. Questo
lo penso per il fatto che se il programma è in esecuzione ma non lavora
sul file, se provo manualmente a modificare il file di testo, questo mi è
impedito e mi si chiede di rinominarlo in altro modo.
C'è un qualche modo per chiudere questo file di testo, o se sono fuori
strada qualcuno può darmi un indicazione?
Grazie Andrea
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Posta un po' di codice che poi vediamo
--
Ciao,
David

David ha scritto:

ecco un pò di codice...
        Nome := Filename;
        AssignFile(F, Nome);
        Filemode := 1;
        if not FileExists(Nome) then begin
            rewrite(F);
            Testo := midstr(Data,2,286);
            writeln(F,Testo);
        end else begin
            Testo := midstr(Data,2,286);
            append(F);
            Writeln(F, Testo);
        end;
        CloseFile(F);
l'errore mi viene generato sull'append...e non sempre,normalmente le prime
n  trasmissioni vanno a buon fine, poi da un momento all'altro i/o error
32!


Prova a non selezionare FileMode (casomai mettila a 2) con Delphi 5 ci sono alcuni casini con i file di testo - con le
altre versioni non so -
Oltre tutto sull'help è scritto:
The FileMode variable determines the access mode to use when typed and untyped files (not text files) are opened using
the Reset procedure.
nota la parte tra parentesi.
Comunque sei sicuro di non accedere al file all'esterno della parte di codice che hai postato?
Te lo chiedo in quanto i/o error 32 significa che il file è già in uso (ovvero non è stato chiuso con closefile)
--
Ciao,
David

 Te lo chiedo in quanto i/o error 32 significa che il file è già in uso
(ovvero non è stato chiuso con closefile)
Agganciandomi alla tua risposta c'è un qualche test da fare per vedere se
un file è gia aperto?Così escluderei questa possibilità (effettivamente
c'è un'altra posizione in cui leggo questo file..).
Cmq grazie x la risposta e l'interessamento.
Ciao
Andrea


Be l'unica è utilizzare una variabile globale che controlla l'apertura da inizializzare sull'assignfile e resettare sul
closefile (per ora mi viene in mente solo questo)
--
Ciao,
David

1) Proteggi codice di questo tipo con una try..finally, per assicurarti
che il file venga chiuso anche in caso di errore.
2) Potrebbe essere che in un ciclo stretto tenti di aprire il file prima
di che Windows abbia avuto il tempo di chiuderlo. Chiudere/riaprire un
file in continuazione non è un buon modo di procedere.
3) Usa le costanti fmXXXXXX per impostare file mode, i codici mnemonici
sono un po' più facili da vedere
4) Su 
www.sysinternals.com
 trovi delle utility (utilizzabile
gratuitamente) come FileMon e Handle che ti permettono di vedere chi apre
i file e chi li possiede.
Luigi D. Sandon - D&amp;D Support Team
--- posted by geoForum on 
http://www.delphiedintorni.it