论坛首页 编程语言技术论坛

给ruby程序以及ruby待操作的文件以完整的路径

浏览 3591 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (14) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-30  
有的时候需要给ruby程序以及ruby待操作的文件以完整的路径,举例说明吧:

在g:\ding\anpc\163_anpc.rb程序中有如下代码:

3.times {
load ‘..\anpc\data_163.rb’
load ‘..\bin\bin_163.rb’
}

如果在g:\ding\anpc\ 下执行163_anpc.rb, 程序可以正常运行,但如果在别的路径,比如c:\,执行g:\ding\anpc\163_anpc.rb,程序就会报错,说找不到data_163.rb和bin_163.rb。

解决问题的方法是给ruby程序以完整的路径,如下所示:

3.times {
load File.join(File.dirname(__FILE__), ‘data_163.rb’)
load File.join(File.dirname(__FILE__), ‘../bin/bin_163.rb’)
}

类似的例子:

在g:\ding\anpc\data_163.rb程序中有如下代码:

#初始化user
users = []
File.open(’user_163_anpc.txt’) do |f|
f.each_line do |line|
words = line.split(’ ‘)
users << {:user => words[0], :password => words[1]}
end
end

该程序在g:\ding\anpc\ 下执行data_163.rb, 文件操作正常,但如果在别的路径,比如c:\,执行g:\ding\anpc\data_163.rb,程序就会报错,说找不到文件user_163_anpc.txt。

解决问题的方法是给待操作的文件以完整的路径,如下所示:

#初始化user
users = []
users_filename = File.join(File.dirname(__FILE__), ‘user_sina_anpc.txt’)
File.open(users_filename) do |f|
f.each_line do |line|
words = line.split(’ ‘)
users << {:user => words[0], :password => words[1]}
end
end

我自己的原创:http://www.sdgz.cn

   发表时间:2010-01-06  
hmm...常见的做法不是File.expand_path(File.dirname(__FILE__))么
0 请登录后投票
   发表时间:2010-01-08  
RednaxelaFX 写道
hmm...常见的做法不是File.expand_path(File.dirname(__FILE__))么

这里,不仅要获得绝对路径,还需要加上同目录下的其它文件名。
0 请登录后投票
   发表时间:2010-01-11  
你也可以把文件所在的目录加到LOAD_PATH里去啊
$:.unshift "/path/to/that/lib"

如果这个目录里的文件比较多的话,你的方法看起来就有太多的File.dirname(__FILE__)
0 请登录后投票
   发表时间:2010-01-11  
trace 写道
你也可以把文件所在的目录加到LOAD_PATH里去啊
$:.unshift "/path/to/that/lib"

如果这个目录里的文件比较多的话,你的方法看起来就有太多的File.dirname(__FILE__)

主要的目的是将测试程序放在usb盘上,方便在不同计算机上运行。
0 请登录后投票
   发表时间:2010-01-18  
try001 写道
trace 写道
你也可以把文件所在的目录加到LOAD_PATH里去啊
$:.unshift "/path/to/that/lib"

如果这个目录里的文件比较多的话,你的方法看起来就有太多的File.dirname(__FILE__)

主要的目的是将测试程序放在usb盘上,方便在不同计算机上运行。


那你可以用符号链接嘛, 一个ln -s 搞定。
0 请登录后投票
   发表时间:2010-01-19  
dazuiba 写道
try001 写道
trace 写道
你也可以把文件所在的目录加到LOAD_PATH里去啊
$:.unshift "/path/to/that/lib"

如果这个目录里的文件比较多的话,你的方法看起来就有太多的File.dirname(__FILE__)

主要的目的是将测试程序放在usb盘上,方便在不同计算机上运行。


那你可以用符号链接嘛, 一个ln -s 搞定。

谢谢dazuiba兄弟,用subst命令搞掂。
现在正重新整理文件,估计可以大大提高程序结构的整洁,我以前怎么没想到呢?或许可以将程序所在的文件夹映射到虚拟内存中,提高运行速度?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics