Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    11

    verificare se file è già aperto da un altro processo

    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?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    11
    preciso sono sempre file di testo.txt

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Prova ad aprirlo con i normali strumenti del C++ e vedi se ottieni un errore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4

    Moderazione

    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 prima di proseguire.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    11
    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?

  6. #6
    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?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    11
    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...

  8. #8
    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 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".
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.