Newsgroup: it.comp.lang.visual-basic
Titolo: Kill fallisce

Ho un file di log dove scrivo le cose importati durante l'esecuzione 
del programma. Il file viene cancellato ad ogni avvio e subito dopo 
ricreato di nuovo, ma mi accorgo che la cancellazione qualche volta 
fallisce, e vi trovo alcuni dati della precedente sessione.
 
Questo il codice:
Kill App.Path & "\LogFile.txt"
x = WritePrivateProfileString("Start", Chiave, Valore, App.Path & 
"\LogFile.txt")
 
Come è possibile? E come rimediare....
Grazie
 
-- 
Greg
 
 

 E come rimediare....
 
con l'api DeleteFile che ti permette di vedere il risultato.
Se la funzione torna 0 la cancellazione ha fallito.
 
http://allapi.mentalis.org/apilist/DeleteFile.shtml
 
 
 
 
 
-- 
ciao
  Stefano

 
http://allapi.mentalis.org/apilist/DeleteFile.shtml
 
 
Ok, vediamo se va meglio
Grezie
 
-- 
Greg
 
 

 Grazie
 
Hai provato ad aprirlo For Output cosě si cancella il contenuto
automaticamente?

 automaticamente?
 
Io non lo apro direttamente, è la WritePrivatePfileString che lo apre, 
come non lo so, e se non c'è lo crea.
 
-- 
Greg
 
 

 come non lo so, e se non c'è lo crea.
 
E' passato un po' di tempo, ma mi pare di ricordare che ci fossero situazioni in cui GetPrivateProfileString/WritePrivateProfileString generassero problemi di lock sui file, che quindi non venivano liberati correttamente... per curiosità, il programma (e quindi il file) gira su disco locale o una share di rete?
 
Per inciso, se è un file ricreato da zero ad ogni avvio, a che scopo usi WritePrivateProfileString, che di suo nasce per scrivere valori in file a struttura semi-fissa, non log sequenziali?
Viceversa, se ti interessa la struttura non sequenziale chiave/valore, allora perchè cancelli il file ogni volta? potresti semplicemente inizializzare/sovrascrivere i valori in avvio, non hai bisogno di riscrivere anche le varie sezioni e le chiavi.
 
mi pare uno strano ibrido tra un Log e un INI...

 mi pare uno strano ibrido tra un Log e un INI...
 
Per me che l'ho disegnato è comodo e ha un senso scrivere leggere la 
coppia chiave/valore, ed ha un senso cancellare ogni volta in quanto 
una certa chiave (e il suo valore) potrebbe esserco oppure no.
 
C'è una prima parte di valor sequensiali, ma poi ho accodato una 
miriade di altre cose che possono verificarsi o meno.
 
Ad ogni modo adesso ho sostituito il Kill con l'api suggerita da SB, 
son curioso di vedere se capita di nuovo.
 
-- 
Greg
 
 

son curioso di vedere se capita di nuovo.
 
Bene, comunque per verificare se la cancellazione è effettivamente avvenuta puoi
utilizzare la GetFileAttributes, io non uso mai l'istruzione Kill per la
gestione degli erroridi Vb che ti sbatte fuori, mentre un api la puoi gestire.
 
Ecco una routine che uso per la cancellazione di files in remoto:
_______________________________________
 
Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA"
(ByVal lpFileName As String) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
 
 
If GetFileAttributes(WorkPath & "\Err.log" & 0&) > 0 Then
 
 C=0
Do :C=C+1
    DeleteFile (WorkPath & "\Err.log" & 0&)
    Sleep 10  : Do Events
  If GetFileAttributes(WorkPath & "\Err.log" & 0&) <= 0 Then  Exit Do
  If C > 5 Then
     MsgBox "IMPOSSIBILE CANCELLARE", VbCritical, Me.Caption: Exit Do
  End If
Loop
 
End If
________________________________________________
 
-- 
ciao
  Stefano