Utilizzando std: fstream come negare l’accesso (lettura e scrittura) al file

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.