PDA

Visualizza la versione completa : [C++] verificare se file è già aperto da un altro processo


pcutente
08-02-2013, 21:25
Salve a tutti

Sto creando un piccolo programma in C++ e ho qualche difficoltà con
dei controlli che devo fare.

Dovrei controllare se un file è già aperto. Esempio se il file
prova.txt è già aperto.
come faccio?

pcutente
08-02-2013, 21:29
preciso sono sempre file di testo.txt

oregon
08-02-2013, 21:44
Prova ad aprirlo con i normali strumenti del C++ e vedi se ottieni un errore.

MItaly
08-02-2013, 21:44
Il linguaggio di riferimento va indicato anche nel titolo sotto forma di tag; ora correggo io.

In ogni caso, vista la sequela di tuoi thread in cui sono dovuto intervenire, ti raccomando di leggere il regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887) prima di proseguire.

pcutente
08-02-2013, 22:24
Originariamente inviato da oregon
Prova ad aprirlo con i normali strumenti del C++ e vedi se ottieni un errore.
Perchè dovrei ottenere errore?
Fino ad adesso non ho mai ottenuto errore.
Vi spiego il problema.. un exe. scrive su un file un certi momenti imprevedibili.
Un altro codice c++ legge quel file continuamente...
Non c'è il rischio che uno legga mentre l'altro sta scrivendo e si ottengano informazioni sbagliate?

MItaly
08-02-2013, 23:35
Sì, il rischio c'è, per cui devi introdurre un qualche meccanismo di sincronizzazione tra i due processi; in particolare, una possibilità può essere aprire il file in modalità esclusiva (il modo per farlo dipende dal sistema operativo), o creare un "file di lock" (o un mutex) la cui esistenza segnala che il file è "impegnato". Oppure, usare un meccanismo diverso per far comunicare i due processi.
Dovresti però specificare meglio il problema: tu hai i sorgenti di questi due programmi? Cosa fanno esattamente?

pcutente
09-02-2013, 00:10
Il problema è sempre quello del programma musicale del thread precedente (varianti).
Praticamente, il programma di cui parlavo prima midi ox permette di catturare tutti i messaggi che arrivano su una periferica midi. Io tramite un vbscript ho salvato alcuni di questi messaggi in un file di testo.
Faccio questo per svincolarmi dall'uso di vbscript e passare al c++ (perchè midi ox può essere comandato solo da vscript in modo semplice)
ora l'altro programma in builder c++ deve leggere continuamente quel file di testo (che naturalmente continua a modificarsi visto che l'altro programma continua spesso a generare messaggi da salvare) e poi in base a quello che trova visualizzare cose a video.
I problemi sono due. Il programma in teoria visualizza delle immagini. ma la scelta delle immagini da visualizzare dipendono dai contenuti dei file di testo, tutte le volte che il file cambia l'immagine a video (spartito musicale) cambia. Sta di fatto che se sto suonando e la tastiera richiede un nuovo sparitito e salva il messaggio sul file di testo , il programma in c++ deve impiegare massimo un secondo per accedere al file e visualizzarlo... il problema che il c++ non sa quando vbscript salva file su file di testo, di conseguenza ho bisogno di un ciclo all'infinito a meno che non mi consigliate alternative
Non so se è chiario.
Gia che ci sono, E' possibile in builder 6 c++ gestire il ciclo di controllo file su un altro thread per non sovraccaricare il programma principale?
E' interessante l'apertura del file in modalità esclusiva, uso windows...

MItaly
09-02-2013, 00:21
Il problema non è banalissimo da risolvere in maniera pulita, specie se non hai il controllo sul codice del programma che scrive il file...
Secondo me la cosa migliore da fare è che tu apra un thread in Kickstarter (http://forum.html.it/forum/forumdisplay.php?s=&forumid=49) spiegando qual è il "problema ultimo" che stai cercando di risolvere, piuttosto che tutti questi thread su problemi specifici e piuttosto "strani".
In questa maniera ci dai una visione di insieme della questione, evitiamo di perderci in problemi di questo tipo e ti possiamo consigliare in maniera mirata qual è la via migliore per risolvere il "problema vero".
:ciauz:

Loading