es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿La opción skip_permission_denied del recursive_directory_iterator parece ser ignorada en macOS?

Usando C++20 y std::filesystem::recursive_directory_iterator en macOS, este código:

for (auto& f : recursive_directory_iterator(getenv("HOME"), directory_options::skip_permission_denied)) {
    // dummy
}

Debería, según mi comprensión de la documentación, saltarse los directorios a los que no tiene permiso de acceder y en los que encuentre un error al intentar recursar en ~/Library/Application Support/MobileSync/.

Sin embargo:

en recursive_directory_iterator::operator++(): intentando recursar en "/Users/t/Library/Application Support/MobileSync": Operación no permitida

Supongo que esto significa que hay alguna función de permisos o seguridad en marcha que el iterador no evita aunque se indique skip_permission_denied. ¿Cuál podría ser y cómo podría hacer que el iterador salte los directorios que lo hacen fallar independientemente de los permisos?

Podría utilizar manualmente disable_recursion_pending() al encontrar directorios conocidos como MobileSync o .Trash que causan este problema, pero eso sería una solución desordenada en comparación con poder detectar de antemano cuándo un directorio causará este problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no soy capaz de probar código, por lo tanto, no puedo hacer suposiciones sobre el comportamiento del código más allá de la documentación. Sin embargo, suponiendo que el comportamiento sea tal como se describe, es posible que existan capas adicionales de permisos de sistema de archivos más allá de los permisos de archivo estándar de Unix que el iterador no pueda omitir.

    En cuanto a saltarse directorios que hacen que el iterador falle independientemente de los permisos, puede ser necesario implementar una función de filtro personalizada que verifique los directorios problemáticos y los omita específicamente. Otra opción podría ser capturar y manejar la excepción que se lanza al encontrar el directorio problemático y continuar iterando desde el siguiente directorio.

    En general, puede ser necesario considerar los requisitos específicos y las limitaciones del proyecto o caso de uso para determinar el mejor enfoque para manejar estas situaciones.

Comments are closed.