Usando std: fstream cómo negar el acceso (leer y escribir) al archivo

¿Cómo puedo denegar el acceso a un archivo que abro con fstream? ¿No puedo acceder al archivo mientras leo / escribo con Fstream?

No puede hacerlo con el flujo estándar, tendrá que usar funciones específicas de la plataforma.

En Windows, puede usar CreateFile () o LockFileEx () . En Linux, hay flock () , lockf () y fcntl () (como dijo el comentador anterior).

Si está utilizando MSVC, puede pasar un tercer parámetro al constructor de fstream. Consulte la documentación de Visual Studio 6 o versiones más recientes . Por supuesto, no funcionará con otros comstackdores y plataformas.

¿Por qué quieres bloquear a los demás de todos modos? Puede haber una mejor solución …

Ampliando el comentario de Casebash:

Para abrir un archivo en Windows para que otros procesos no puedan escribir en él, use

 file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR); 

_SH_DENYRW negará tanto el acceso de lectura como el de escritura

No hay forma de hacerlo en C ++ nativo, ya que dependería en gran medida de la plataforma. En Linux / UNIX, puede hacer esto con flock o fcntl . No estoy seguro de cómo hacerlo en Windows.

En Windows, parece que tiene que pasar algunas banderas a CreatFile o usar LockFileEx (que permite el locking de rango de bytes).

Tenga en cuenta que todos estos métodos funcionan en los descriptores / identificadores de archivos del sistema operativo subyacente, no en los fstream s. Necesitará usar la API de Posix o Windows para leer / escribir desde el archivo, o ajustar el descriptor / manejador del archivo en un fstream . Esto depende de la plataforma de nuevo. Estoy seguro de que hay una manera de hacerlo, pero no lo recuerdo en la cabeza.

Usando el módulo Boos Interprocess , hay funcionalidad de locking de archivos .

Bloquee el archivo, ábralo, lea y / o escriba desde / hacia él, ciérrelo, desbloquéelo.