Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Leggere in file già aperto da un'altro metodo...
Forum - C# / VB.NET - Leggere in file già aperto da un'altro metodo...

Avatar
uelfox (Normal User)
Rookie


Messaggi: 33
Iscritto: 25/01/2010

Segnala al moderatore
Postato alle 21:38
Lunedì, 28/11/2011
Ciao a tutti, ho la necessità di dover leggere un file, il quale viene creato e scritto da un'altra applicazione ma nn viene chiuso. Entrambe le applicazioni sono mie, ma quando cerco di aprire il file ancora aperto dall'altra applicazione, ricevo l'errore "impossibile aprire il file, in uso da un'altra applicazione...."
Devo fare questo, xchè i dati che vengono resi dalla prima applicazione, devono essere elaborati in tempo reale dall'altra, la quale dopo aver letto il dato, lo deve cancellare(il dato).
Forse la soluzione è semplice, ma nn ho molta esperienza sulla gestione in/out su file.

Grazie per l'eventuale vs. aiuto

PM
Avatar
mattia1481 (Member)
Pro


Messaggi: 84
Iscritto: 03/11/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 12:56
Martedì, 29/11/2011
Mi permetto di contestare la risposta di HeDo perché credo che la soluzione che sto per proporti "dovrebbe" funzionare.

Utilizza un oggetto System.IO.FileStream per aprire il tuo file e inizializzalo con il seguente costruttore e passando al parametro share la costante System.IO.FileShare.ReadWrite, in questo modo rendi possibile l'accesso al tuo file ad altri processi con l'autorizzazione alla lettura e alla scrittura.

Public Sub New ( _
    path As String, _
    mode As FileMode, _
    access As FileAccess, _
    share As FileShare)         <-- System.IO.FileShare.ReadWrite

Ciao.

hai ragione, la cosa si può fare... ma siccome non mi è mai passato per l'anticamera del cervello di azzardare la comunicazione interprocesso attraverso un file condiviso NE L'HO MAI VISTA FARE, ho pensato che non esistesse... ad ogni modo continuo a credere che sia una pessima cosa. - HeDo - 29/11/11 19:31
Anche io non ho mai avuto modo di usarla, ritengo che l'uso di tale funzione preveda particolare attenzione, ma, se è stata prevista nel Framework evidentemente è perché c'è qualche d'uno che la usa...quindi, invito uelfox a buttarsi in questa difficile ma sicuramente stimolante impresa! ;-) - mattia1481 - 29/11/11 20:30
Grazie per le Vs. risposte, ma forse mi sono spiegato male; Le 2 applicazioni sono su 2 pc diversi, collegati tra loro con cavo rete incrociato..... - uelfox - 29/11/11 20:54
Dovrebbe funzionare lo stesso, prova...poi facci sapere. Ciao. - mattia1481 - 29/11/11 21:03
se le cose stanno così fai prima ad usare i socket... questi metodi "alternativi" sono un fail dietro l'altro. @mattia: non è detto che se una cosa si può fare vuol dire che sia giusto farlo o è il modo migliore per farlo. Questa feature è stata aggiunta per leggere un file già aperto da un altro pr - HeDo - 29/11/11 22:32
programma senza che si sollevi un'eccezione. Ad esempio un file che scrive un file csv già aperto con excel, sono sicuro che nessuno è mai riuscito a pensarla così in maniera malsana da montarci sopra la comunicazione interprocesso... - HeDo - 29/11/11 22:33
Ho provato il suggerimento di mattia1481, riesco ad aprire il file anche dalla 2'applicazione, ma nn riesco a leggere nessun byte.... Forse ho fatto qualche errore nel codice, ma il problema è che il file che viene aggiornato dalla 1' applicazione, non viene mai chiuso. - uelfox - 29/11/11 22:47
Come potrei muovermi ad esempio prendendo il suggerimento di HeDo? Io in fonso devo comunicare una semplice stringa di 20 caratteri ala volta!! - uelfox - 29/11/11 22:51
usa le classi TcpClient e TcpListener - HeDo - 29/11/11 23:40
Un'ultima cosa.... il server è colui che genera il messaggio o è il client? - uelfox - 30/11/11 00:04
è ininfluente in quanto una volta stabilita una connessione il canale è bidirezionale. ad ogni modo dalle tue domande si evince che sei agli inizi e ti mancano ancora molte cose. ti consiglio un buon libro prima di cimentarti in queste cose. - HeDo - 30/11/11 01:00
Per @Hedo : non esistono modi "giusti" per fare una cosa, esistono modi differenti per ottenere il medesimo risultato. Se è stata prevista la possibilità di condividere un file in lettura e in scrittura è perché si può fare, il fatto che sia complicato è un altro discorso. Ciao. - mattia1481 - 30/11/11 08:56
non dire cazzate, esistono SI metodi giusti e metodi meno giusti. La funzionalità di poter aprire un file già aperto NON è stata pensata per la comunicazione interprocesso ma per fare altre cose. PUNTO E STOP. Se poi vuoi arrampicarti sui vetri fai pure, ma non vai da nessuna parte. - HeDo - 30/11/11 11:21
...che diplomazia -.- - mattia1481 - 30/11/11 11:41
la diplomazia non c'entra niente, c'entra il buon senso - HeDo - 30/11/11 11:57
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 22:10
Lunedì, 28/11/2011
non puoi farlo, devi usare un altro genere di comunicazione interprocesso, come ad esempio socket o pipes

PM