2011-12-21 18 views
169

¿Hay una clase/método de Ruby donde podría pasar "una ruta completa", home/me/a_file.txt, para identificar si es una ruta de archivo válida?Cómo verificar la existencia de archivos

+1

Puede aclarar si quiere saber "si se trata de una ruta de archivo válida" o "si es una ruta de acceso a un archivo que existe"? –

+5

Mi consejo es pasar 10 minutos leyendo todos los métodos en las clases FileUtils y File. ¡Le ahorrará mucho tiempo en el largo plazo! – Alain

Respuesta

42

Salida Pathname y en particular Pathname#exist?.

File y su módulo FileTest son quizás más simples/más directos, pero creo que Pathname es una interfaz más agradable en general.

+1

gracias Paul, Pathname es lo que necesito. De alguna manera yo no soy capaz de encontrar "Archivo" y "FileTest" están aceptando "LLENO" argumento de ruta. Gracias de nuevo – iwan

+0

Pathname es muy útil, pero no es un reemplazo completo para File y FileTest. Sin embargo, es fácil extenderlo para que tenga las mismas pruebas, y entonces su utilidad como envoltorio realmente brilla. –

445
# file? will only return true for files 
File.file?(filename) 

y

# Will also return true for directories - watch out! 
File.exist?(filename) 
+10

solo File.file? debería ser suficiente, ¿no? Docs: "Devuelve verdadero si el archivo con nombre existe y es un archivo normal" –

+1

Es importante tener en cuenta que el "y" de arriba no es código: 'File.exist? (Filename) y File.file? (Filename)' siempre devuelve falso desde File.exist? "Devuelve verdadero si el archivo nombrado es un directorio, de lo contrario es falso". Lo sentimos –

+2

Chris que están mal verdadero y falso => ​​false ' >> File.file? ('/ Etc/passwd') => true >> File.file? ('/ Etc /') => falso >> File.exists? ('/ etc /') => true >> File.exists? ('/ etc/passwd') => true >> File.file? ('/ etc/passwd ') y File.exists? ('/etc/passwd ') ' – shadowbq

11

NOTA: file? solo devolverá true para los archivos.

Para comprobar si existe un archivo:

File.exist?('file_name.csv') 
O/P: true 

También se puede utilizar para los directorios:

File.exist?('~/dir_name') 
O/P: true 
Cuestiones relacionadas