2017-08-08 69 views
2

所以我的项目层次结构如下:为什么使用不同文件夹内的文件中的函数时无法找到我的文件?

. 
└── project 
    ├── main.rb 
    ├── res 
    │ └── test.txt 
    └── modules 
     └── printer.rb 

我的打印机文件看起来像它打印文本文件的内容到控制台这包含一个函数:

def print_file_dir(file) 
    logo = File.open(__dir__ + file, 'r'); 
    logo.each_line do |line| 
    puts line 
    end 
    logo.close 
    puts 
end 

,我打电话给我的方法像这样:

require_relative 'modules/printer' 
print_file_dir('/res/logo.txt') 

然而,当我在叫我print_file_dir方法上文件夹,它引发以下错误:

.../modules/printer.rb:3:in `initialize': No such file or directory @ rb_sysopen - .../modules/res/test.txt (Errno::ENOENT)

我怎样才能从其中printer.rb文件所在的文件夹模块中获取文件阻止它,而是从我相对于初始目录中的文件的状态?

+0

你怎么称呼你的方法,你如何指定文件名时,你打电话给你的方法是什么? –

+0

@RoanFourie编辑OP – rshah

回答

1

当你改变你的模块,下面的代码在你的代码,你会得到期望的结果:

def print_file_dir(file) 
     logo = File.open(Dir.getwd + file, 'r'); 
     logo.each_line do |line| 
      puts line 
     end 
     logo.close 
     puts 
    end 
+0

这真的很奇怪,因为当我使用'Dir.getwd'时,它试图在我的系统中找到另一个目录。那真的很奇怪? – rshah

+0

等待从不知道,我正在使用原子及其与红宝石生成器的错误,并有多个项目文件夹 – rshah

+1

好吧,很酷。你差不多有一段时间了。祝你的项目好运。 –

0

我会删除从方法的文件路径逻辑:(我已经重构的方法点点)

# project/modules/printer.rb 

def print_file(filename) 
    IO.foreach(filename) { |line| puts line } 
    puts 
end 

,而是通过相关的文件名给调用者:

# project/main.rb 

require_relative 'modules/printer' 
print_file 'res/logo.txt' 

或绝对文件名:

print_file '/path/to/project/res/logo.txt' 

这也可以通过__dir__检索:

print_file File.join(__dir__, 'res', 'logo.txt') 
相关问题