Ruby使用gets获取文件名读取文件时报Errno::ENOENT错误如何解决
问题根源
调用gets()获取用户输入时,会自动包含输入末尾的换行符\n:当你输入albums.txt后按下回车,file_name变量实际存储的值是"albums.txt\n",而非你预期的"albums.txt",系统自然找不到带换行符后缀的文件,因此抛出Errno::ENOENT错误。你硬编码文件名时没有附带换行符,所以可以正常运行。
修复方案
调用String#chomp方法去除输入末尾的换行符即可,修改后的代码如下:
# 先输出提示信息引导用户输入 print "请输入目标文件名:" # 获取输入后直接删除末尾换行符 file_name = gets.chomp # 不需要额外做字符串插值,直接传入变量即可 a_file = File.new(file_name, "r")
可选优化:可提前判断文件是否存在,避免程序直接崩溃:
file_name = gets.chomp if File.exist?(file_name) a_file = File.new(file_name, "r") # 后续文件读取逻辑写在这里 else puts "输入错误:文件#{file_name}不存在,请检查文件名后重试" end
内容的提问来源于stack exchange,提问作者Theo1290
相关产品推荐
相关产品推荐

