Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [vb2008] leggere file già in uso da altro processo

    dovendo leggere un file .log (un file di testo), gestito da un gioco, in VB6.0 col codice

    NumFile = FreeFile
    Open File For Binary As NumFile
    Get #NumFile, Buffer, Stringa
    Close (NumFile)

    in un attimo inserisco nella variabile Stringa il contenuto del file, anche se al momento è in uso da un altra applicazione (il gioco)

    in VB2008 se uso il codice:

    Try
    Dim r As New IO.StreamReader(LogFilePath())
    While Not r.EndOfStream
    Riga = r.ReadLine
    End While

    r.Close()
    Catch ex As Exception
    End Try

    ottengo immediatamente una eccezione di file già in usa da altra applicazione, il che è verissimo

    domanda... come leggere in VB2008 un file già in uso da altra applicazione?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Qualcosa del genere ...

    codice:
    Dim fs As FileStream = New FileStream(LogFilePath(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
    Dim sr As StreamReader = New StreamReader(fs)
    Dim s As String = sr.ReadToEnd()
    sr.Close()
    fs.Close()
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    niente da fare:

    System.IO.IOException = {"Il processo non può accedere al file 'C:\Giochi\MyGame\Logs\Launch.log' perché è in uso da un altro processo."}

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Deve essere

    FileShare.ReadWrite

    e non

    FileShare.Read
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    fenomeno!!

    funge perfettamente

    visto che ci sono approfitto: dal momento che se il gioco si prolunga il file di log può diventare discretamente grande, quando vado a rileggerlo posso dichiarare una variabile statica che mi indichi il punto da cui devo iniziare ad aprire il file, o devo necessariamente aprirmelo tutto?

    lo so, una volta che è aperto, con la variabile statica comunque posso andare a leggere la stringa da quel punto in poi... era solo per abbreviare eventuali tempi di apertura di un file che potrebbe diventare grandicello, qualche mega

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi posizionare il punto di lettura prima della riga con la ReadToEnd, usando la

    fs.Seek(posizione, SeekOrigin.Begin)

    in cui posizione è il punto da cui vuoi iniziare a leggere.

    Per memorizzare il punto attuale (per utilizzarlo in seguito) puoi salvare in una variabile il valore ottenuto da

    fs.Seek(0, SeekOrigin.Current)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.