¿Qué causa los errores de ENOENT?

¿Qué causa los errores de ENOENT?

Estoy ejecutando un script de Nodo y aparece este error en esta ruta:

 ENOENT ../../../Library/Application Support/Google/Chrome/RunningChromeVersion

Puedo eliminar el error cerrando Chrome.

La mayor parte de mis búsquedas en Google me han dicho queENOENTELos errores son causados ​​por archivos/carpetas que no salen.

Sin embargo, en este caso la carpeta claramente existe y tiene que ver con el hecho de que Chrome se está ejecutando.

Quiero poder recorrer los archivos incluso si están en uso. es posible?

La mayoría de los demás errores son causados ​​por Apple y estoy en una máquina Apple.

ENOENT ../../../Library/Containers/com.apple..NowPlayingWidgetContainer/Data/Documents/iChats

Respuesta1

El elemento nombrado RunningChromeVersionexiste, pero es unenlace simbólicocuyoobjetivono existe. Su secuencia de comandos de Node no brinda ningún tratamiento especial a los enlaces, por lo que la acción predeterminada al intentar abrirlos es seguir el enlace.

El destino del enlace no existe porque, en primer lugar, no pretende apuntar a un archivo. Es un enlace ficticio con información no relacionada (por ejemplo, un número de versión) almacenada en el campo 'destino' donde normalmente iría un nombre de archivo.

Por ejemplo, aquí está el equivalente en Linux (tenga en cuenta la lindicación de "tipo"):

$ ls -l ~/.config/cromo
total 4,2 millones
...
drwx------ 3 usuarios de Grawity 4.0K 14 de mayo 09:52 ShaderCache/
yorwxrwxrwx 1 usuarios de grawity 20 17 de mayo 13:38 SingletonCookie-> 18396286875963223082
yorwxrwxrwx 1 usuarios de grawity 12 17 de mayo 13:38 SingletonLock-> heladas-453916
yorwxrwxrwx 1 usuarios de grawity 50 17 de mayo 13:38 SingletonSocket-> /tmp/.org.chromium.Chromium.7Og2ow/SingletonSocket=
drwx------ 3 usuarios de Grawity 4.0K 27 de diciembre 08:02 SSLErrorAssistant/
...

Este es un método algo común para crear "archivos de bloqueo"; solo se necesita una llamada al sistema para crear atómicamente un enlace (y fallar si ya existe), una llamada al sistema para leer su "contenido" (el campo "destino"), y creo que incluso es compatible con NFS/SMB/AFS, mientras que el archivo real los bloqueos tienden a funcionar peor con estos sistemas de archivos de red.

Si usa readdir() para escanear directorios, entonces cada entrada del directorio ya tiene información sobre su tipo: por ejemplo, en Node, puede llamar.isSymbolicLink()en cada resultado de readdir.

Si solo tiene la ruta, puede usar el equivalente de Nodo dellstat()función para verificar si una ruta es un enlace simbólico y evitar atravesarla de esa manera (también puede readlink()leer su campo 'destino' si lo desea).

En realidad esrecomendadoomitir enlaces simbólicos al realizar una búsqueda recursiva de archivos, porque seguir enlaces simbólicos puede llevarlo a un bucle infinito (por ejemplo, dirA/linkB apunta a ../dirB, pero dirB/linkA apunta a ../dirA, y ahora está atascado).

información relacionada