我只是想知道以下是否可能:
我创建一个ruby可执行文件的目标是能够给我的ruby脚本增加一些可移植性。脚本所做的是收集放置在某个目录中的一些.txt文件,然后处理它们并在另一个文件目录中输出.txt结果。
如果没有ocra,这对我的脚本很好,因为我只是让我的脚本搜索位于其当前工作目录中的某个文件夹名称,并处理其中放置的所有.txt并将其结果输出到另一个特定的文件夹中。
我的问题是,我可以让ocra创建的最终.exe文件做同样的事情吗?
当前的问题是,当我运行以下命令时:
ocra myscript.rb use_this_folder/
然后将生成的"myscript.exe"移到另一个"use_this_folder"的副本所在的地方,它不识别该文件夹。
在我的ruby脚本的顶部,我放置:
$:.unshift File.dirname($0)
Dir.chdir File.dirname($0)
希望这一切都有意义。如有任何帮助,不胜感激。
如果我理解正确的话,您的程序很难找到文本文件所在的目录。我猜你的输入和输出文件夹是在相对文件夹的exe文件,你要运行。Dir.chdir File.dirname($0)
提供临时目录中exe文件的临时版本。您的程序需要知道原始exe的位置。您的exe所在的位置存储在这个变量中:ENV["OCRA_EXECUTABLE"]
。使用此命令将工作目录更改为与exe所在目录相同的目录:
Dir.chdir File.dirname(ENV["OCRA_EXECUTABLE"]) if ENV["OCRA_EXECUTABLE"]
例如这个脚本,exe位于另一个驱动器根目录下名为"MyProgram"的文件夹中:
Dir.chdir File.dirname($0)
p Dir.pwd
Dir.chdir File.dirname(ENV["OCRA_EXECUTABLE"]) if ENV["OCRA_EXECUTABLE"]
p Dir.pwd
在exe文件运行时输出:
"C:/Users/User/AppData/Local/Temp/ocr7293.tmp/src"
"D:/MyProgram"
if ENV["OCRA_EXECUTABLE"]
是一个位代码询问是否更改目录,如果它是一个ocra exe文件。如果没有if语句,环境变量为nil, Dir.chdir
将抛出异常,因为它不能将目录更改为nil。
时间有点紧,但希望这能有所帮助。好运。