Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby无法打开文件(Errno::enoint),但可以从IRB打开相同的路径_Ruby_File Handling - Fatal编程技术网

Ruby无法打开文件(Errno::enoint),但可以从IRB打开相同的路径

Ruby无法打开文件(Errno::enoint),但可以从IRB打开相同的路径,ruby,file-handling,Ruby,File Handling,我有一个简单的Ruby脚本,它从字符串数组中构建文件列表,因此我有一个类似这样的方法: def initialize( rootpath, name ) @content = "" intermission = "" if ( ! (rootpath[-1] == "/" || name[0] == "/" )) intermission="/" end @path= "#{rootpath}#{intermission}#

我有一个简单的Ruby脚本,它从字符串数组中构建文件列表,因此我有一个类似这样的方法:

  def initialize( rootpath, name )
    @content = ""
     intermission = ""
     if ( ! (rootpath[-1] == "/" || name[0] == "/" ))
       intermission="/"
       end

     @path= "#{rootpath}#{intermission}#{name}"
     print "Open JavascriptFile from #{@path}" 
     if (! File.exists? @path)
       print "File does not exist!" 
       end
     File.open( @path ).each do |line|
       @content << line
       end
     end
当我从IRB加载我的类并运行它时,我得到:

Open JavascriptFile from /home/glenatron/projects/myJSProject/alice.js
File does not exist!
Errno::ENOENT: No such file or directory - /home/glenatron/projects/myJSProject/alice.js
据我所知,这意味着该文件不存在


然而,不仅文件确实存在,在IRB中,我可以粘贴完全相同的路径并查看其内容-一个简单的
文件.open(“/home/glenatron/projects/myJSProject/alice.js”)。每个{line | print line}
都显示了文件的完整内容。那么,为什么我可以通过直接的命令行请求而不是Ruby类来实现这一点呢?它是否试图读取本地路径而不是我正在传递的完整路径?

else
块保护
File.open..
行:

 if (! File.exists? @path)
   print "File does not exist!" 
 else # <---
   File.open( @path ).each do |line|
     @content << line
   end
 end  # <----
 if (! File.exists? @path)
   print "File does not exist!" 
   return
 endif
否则,代码总是尝试打开该文件,即使它不存在


用于连接路径组件:

File.join("/home/glenatron/projects/myJSProject/", "alice.js")
# => "/home/glenatron/projects/myJSProject/alice.js"
File.join("/home/glenatron/projects/myJSProject", "alice.js")
# => "/home/glenatron/projects/myJSProject/alice.js"

编辑以将解决方案(在注释中)纳入答案:
要找到确切的路径,请使用
p@path
-这表明尝试打开的路径失败时是这样的:
/home/glenatron/projects/myJSProject/alice.js\r
,这是导致问题的原因。一个简单的
@path.strip在问题明确后解决。

根据问题中显示的代码, 看起来像是
结尾
而不是
其他
,例如

 if (! File.exists? @path)
   print "File does not exist!" 
   end   # <------------ This wasn't valid
 File.open( @path ).each do |line|
     @content << line
   end
 end
如果(!File.exists?@path)
打印“文件不存在!”

结束#谢谢-当代码准备好正式使用时,我会这样做,但现在我需要知道为什么,当文件确实存在并且我可以从Irb打开它时,Ruby认为它不存在吗?@glenatron,你是在同一台机器上运行Irb和Ruby脚本吗?不仅仅是在同一台机器上,我正在将脚本加载到同一个Irb会话中(只需执行
加载“MyScript.rb”
,然后手动实例化我的对象)这样两者之间应该绝对没有环境差异。@glenatron,您能将
p@path
的结果发布在
@path=…
行之后吗?(以确保路径中没有不可见的字符)@falstru有趣-上面写着
“/home/glenatron/projects/myJSProject/alice.js\r”
-你认为那是什么?
\r
在那里做什么?它是半个换行符吗???试着简化你的代码并发布所有代码。虽然这是准确的,但它与问题的答案并不相关。也就是说,答案相当模糊,需要仔细梳理。。。
 if (! File.exists? @path)
   print "File does not exist!" 
   end   # <------------ This wasn't valid
 File.open( @path ).each do |line|
     @content << line
   end
 end
 if (! File.exists? @path)
   print "File does not exist!" 
 else
   File.open( @path ).each do |line|
   @content << line
   end  # THIS end is valid as it ends a `.each` block
 end