File di testo

di il
3 risposte

File di testo

Salve a tutti ho un piccolo problemino.
Avrei bisogno di sapere se un file di testo è già aperto da un altro utente. Ho cercato in rete, ho anche trovato qualche cosa, ma non da il risultato voluto.
Vi scrivo il codice che ho trovato:

Function IsFileOpen1(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
Error errnum
End Select
End Function

Questa non funziona!
Ho fatto delle prove, riesco a capire che il file è aperto quando uso la funzione Name ... As ....
Il fatto è che vorrei saperlo prima di spostare il file in una nuova directory.
Avete qualche idea?
Grazie a tutti.

3 Risposte

  • Re: File di testo

    Ciao.
    Se avessi bisogno di questa cosa, sfrutterei quello che hai detto:
    Se il file è già aperto e provi a usare "name...." verrà generato un errore, che se non erro è il (75), quindi con una bella intercettazione puoi farti una funzione che ti dice se un file è aperto oppure no, o senza funzione, nella routine dove devi verificare la cosa che ti interessa, metti un "on error..." e la relativa parte di intercettazione e così saprai se proseguire nell'operazione oppure no (se è aperto oppure no...).
    Saluti "toscani".
    Luciano.
  • Re: File di testo

    Vero!, ma non ti ho detto che esiste un altro sistema che è in "ascolto" sulla stessa cartella.
    Brevemente, se questo sistema vede che il file non c'è più deve iniziare una serie di operazioni, è come se gli avessi dato il via. Morale non posso togliere il file per verificare se è aperto da altri.
    Hai altre idee?
  • Re: File di testo

    Ok.
    Cercando quà è la ho trovato una buona idea, aprire il file con blocaggio esclusivo (opzione "lock" di Open).
    Tale istruzione, nel caso di file già aperto, genera un errore e basterà gestirlo per sapere:

    Qui la funzione che puoi copiare con i valori ke restituisce...

    '--------------------------------------------------
    ' Long Function [FileIsOpen]
    ' Verifica se il file è aperto da un altro utente
    ' 0 = file non aperto
    ' 1 = file aperto
    ' 100 = errore non previsto
    '--------------------------------------------------
    Private Function FileIsOpen(fileToOpen) As Long
    Dim f As Integer
    f = FreeFile
    On Error GoTo ERROR_OPEN
    Open fileToOpen For Binary Access Read Lock Read As #f
    Close #f
    FileIsOpen = 0 ' file non aperto
    Exit Function
    ERROR_OPEN:
    If Err = 70 Then ' file già aperto
    FileIsOpen = 1
    Err.Clear
    ElseIf Err <> 0 Then
    FileIsOpen = 100 ' altro tipo d'errore
    End If
    End Function

    Spero che vada bene, non ne ho controllato il funzionamento.
    Luciano.
Devi accedere o registrarti per scrivere nel forum
3 risposte