Come posso negare l’accesso a un file che apro con fstream? Non riesco ad accedere al file mentre lo sto leggendo / scrivendo con fstream?
Non puoi farlo con lo standard fstream, dovrai usare le funzioni specifiche della piattaforma.
Su Windows, è ansible utilizzare CreateFile () o LockFileEx () . Su Linux, ci sono flock () , lockf () e fcntl () (come diceva il commentatore precedente).
Se si utilizza MSVC, è ansible passare un terzo parametro al costruttore di fstream. Vedere la documentazione per Visual Studio 6 o versioni più recenti . Ovviamente non funzionerà con altri compilatori e piattaforms.
Perché vuoi bloccare gli altri comunque? Potrebbe esserci una soluzione migliore …
Espansione del commento di Casebash:
Per aprire un file in Windows in modo che altri processi non possano scrivere per usarlo
file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);
_SH_DENYRW negherà sia l’accesso in lettura che in scrittura
Non c’è modo di farlo in C ++ nativo, in quanto sarebbe altamente dipendente dalla piattaforma. Su Linux / UNIX, puoi farlo con flock
o fcntl
. Non sono sicuro di come farlo su Windows.
Su Windows, sembra che devi passare alcuni flag a CreatFile
o usare LockFileEx
(che consente il blocco dell’intervallo di byte).
Si noti che tutti questi metodi funzionano sui descrittori / handle del file OS sottostante, non su quelli di fstream
. Dovrai o usare l’API di Posix o di Windows per leggere / scrivere dal file o avvolgere il descrittore / handle del file in un fstream
. Questo dipende ancora dalla piattaforma. Sono sicuro che c’è un modo per farlo, ma non me lo ricordo da cima a fondo.
Utilizzando il modulo Interprocess Boos , è disponibile la funzionalità di blocco dei file .
Blocca il file, aprilo, leggi e / o scrivi da / a esso, chiudilo, sbloccalo.