Il linguaggio Visual Basic di Microsoft
 

Kill fallisce

Greg 12 Feb 2015 10:55
Ho un ******* di log dove scrivo le cose importati durante l'esecuzione
del programma. Il ******* 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
SB 12 Feb 2015 13:37
Il giorno Thu, 12 Feb 2015 10:55:41 +0100, Greg <greg_solaniU ******* it> ha
scritto:

>Ho un ******* di log dove scrivo le cose importati durante l'esecuzione
>del programma. Il ******* 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?

Mah, forse il ******* ha ancora qualche handle in uso

> 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
Greg 12 Feb 2015 14:04
Il 12/02/15 13:37:48 SB ha scritto:

>> Come è possibile?
> Mah, forse il ******* ha ancora qualche handle in uso

In teoria no, ma potrebbe essere che l'ultimo comando di scrittura è
parcheggiato da qualche parte in cache ....

>> 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

Ok, vediamo se va meglio
Grezie

--
Greg
Andrea (Work) 16 Feb 2015 10:28
Il Thu, 12 Feb 2015 10:55:41 +0100, Greg ha scritto:

> Ho un ******* di log dove scrivo le cose importati durante l'esecuzione
> del programma. Il ******* 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

Hai provato ad aprirlo For Output così si cancella il contenuto
automaticamente?
Greg 16 Feb 2015 18:32
Il 16/02/15 10.28.46 Andrea (Work) ha scritto:

>> Questo il codice:
>> Kill App.Path & "\LogFile.txt"
>> x = WritePrivateProfileString("Start", Chiave, Valore, App.Path &
>> "\LogFile.txt")
>>
>> Come è possibile? E come rimediare....
>> Grazie

> Hai provato ad aprirlo For Output così si cancella il contenuto
> automaticamente?

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

--
Greg
Luca D 16 Feb 2015 18:51
On Monday, February 16, 2015 at 6:32:59 PM UTC+1, Greg wrote:
> Io non lo apro direttamente, è la WritePrivatePfileString che lo apre,
> 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 ******* che quindi non venivano liberati correttamente... per
curiosità, il programma (e quindi il ******* gira su disco locale o una
******* di rete?

Per inciso, se è un ******* ricreato da zero ad ogni avvio, a che scopo usi
WritePrivateProfileString, che di suo nasce per scrivere valori in ******* a
struttura semi-fissa, non log sequenziali?
Viceversa, se ti interessa la struttura non sequenziale chiave/valore, allora
perchè cancelli il ******* 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...
Greg 16 Feb 2015 23:16
Il 16/02/15 18.51.01 Luca D ha scritto:
> On Monday, February 16, 2015 at 6:32:59 PM UTC+1, Greg wrote:
>> Io non lo apro direttamente, è la WritePrivatePfileString che lo apre,
>> 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 ******* che quindi non venivano liberati correttamente... per
> curiosità, il programma (e quindi il ******* gira su disco locale o una
*******
> di rete?

Questo non saprei dirlo, ma ci può essere di tutto

> Per inciso, se è un ******* ricreato da zero ad ogni avvio, a che scopo usi
> WritePrivateProfileString, che di suo nasce per scrivere valori in ******* a
> struttura semi-fissa, non log sequenziali? Viceversa, se ti interessa la
> struttura non sequenziale chiave/valore, allora perchè cancelli il *******
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...

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
SB 17 Feb 2015 10:02
Il giorno Mon, 16 Feb 2015 23:16:37 +0100, Greg <greg@alicie.com> ha scritto:


>
>Ad ogni modo adesso ho sostituito il Kill con l'api suggerita da SB,
>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

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio Visual Basic di Microsoft | Tutti i gruppi | it.comp.lang.visual-basic | Notizie e discussioni visual basic | Visual basic Mobile | Servizio di consultazione news.