¿Cómo puedo denegar el acceso a un archivo que abro con fstream? ¿No puedo acceder al archivo mientras leo/escribo con Fstream?Uso de std: fstream cómo denegar el acceso (lectura y escritura) al archivo
Respuesta
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 para Visual Studio 6 o newer versions. Por supuesto, no funcionará con otros compiladores y plataformas.
¿Por qué quieres bloquear a los demás de todos modos? Puede haber una solución mejor ...
[Este hilo] (http: // stackoverflow.com/questions/4435091/sh-none-is-not-a-member-of-stdbasic-filebuf-elem-traits/4435481 # 4435481) proporciona más información sobre el uso de 'fstream' – Casebash
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 al CreatFile
o usar LockFileEx
(que permite el bloqueo del rango de bytes).
Tenga en cuenta que todos estos métodos funcionan en los descriptores/identificadores de archivos del sistema operativo subyacente, no en fstream
s. Necesitará utilizar Posix o la API de 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.
Al utilizar el módulo Boos Interprocess, existe la funcionalidad file lock.
Bloquea el archivo, ábrelo, lee y/o escribe desde/hacia él, ciérralo, desbloquéelo.
Ampliando el comentario de Casebash:
Para abrir un archivo en Windows para que otros procesos no pueden escribir en él uso
file.rdbuf()->open(path, std::ios_base::app, _SH_DENYWR);
_SH_DENYRW negará tanto de lectura como de
- 1. std :: fstream no crea el archivo
- 2. descriptor de archivo de un std :: fstream
- 3. ¿Es seguro denegar el acceso al archivo .ini en .htaccess?
- 4. Lectura y escritura desde y al mismo archivo en Java
- 5. Cómo denegar el acceso a un archivo .htaccess en
- 6. Java: archivo CSV de lectura y escritura
- 7. Denegar acceso al proceso del programa Kiosco
- 8. Fstream no puede crear un nuevo archivo
- 9. Lectura y escritura de vectores C++ en un archivo
- 10. Lectura y escritura de localStorage?
- 11. ¿Debo cerrar un std :: fstream?
- 12. tomcat denegar el acceso a archivos específicos
- 13. .htaccess denegar el acceso a todos excepto a un archivo
- 14. de lectura y escritura en el mismo archivo csv
- 15. escritura y el archivo de lectura en PhoneGap
- 16. de escritura y lectura cadenas a/desde un archivo interno
- 17. SQLite lectura y escritura simultáneas
- 18. Lectura y escritura de XML en C#
- 19. Dos procesos de lectura/escritura en el mismo archivo Python
- 20. ARCHIVO vs fstream
- 21. Node.js líneas de archivo de lectura y escritura
- 22. Lectura y escritura de archivos binarios
- 23. lectura y escritura simultánea un archivo en C#
- 24. Ver/editar elementos de trabajo y denegar el acceso al código fuente en TFS 2010
- 25. Bloqueo de lectura y escritura con GCD
- 26. archivo de lectura/escritura vs base de datos de lectura/escritura
- 27. lectura y XML escritura de archivos
- 28. denegar el acceso directo a una carpeta y el archivo .htaccess por
- 29. .htaccess denegar el acceso a archivos específicos? más de un
- 30. lectura/escritura sin restricción frente a lectura/escritura en hibernación?
Necesito leer del archivo y cambiar las líneas de acuerdo con el contenido. Quiero evitar cambios en el archivo mientras estoy leyendo y escribiendo en él (tengo los datos más recientes y no los anulo) Lo implementé usando fstream, ¿tengo que cambiar todo el código para usar identificadores y almacenamientos intermedios (readfile) o puedo obtener un Handle from fstream? Tuve problemas con readfile y writefile porque necesito leer línea por línea y escribir así. (Con fstream utilicé la función getline fs fstream (PATH), mientras que (file.eof()) \t getline (fs, línea);.! hacer algo ... fs.write (str, str.size ()); fs.clear(); fs.close(); – sofr
¿Desea proteger su archivo de otra instancia de su programa o de un programa diferente? Para el primero, una solución fácil es usar archivos de bloqueo/directorios - la mayoría de los programas lo hacen de esta manera. Por el segundo, nunca lo he visto suceder, si realmente lo necesita, vea mi respuesta. – Hali