2

我只想知道以下是否可行:

我创建 ruby​​ 可执行文件的目标是能够为我的 ruby​​ 脚本添加一些可移植性。该脚本的作用是收集一些放在某个目录中的 .txt 文件,然后处理它们并将 .txt 结果输出到另一个文件目录中。

如果没有 ocra,这适用于我的脚本,因为我只是让我的脚本搜索位于其当前工作目录中的某个文件夹名称,并处理放置在其中的所有 .txt 并将其结果输出到另一个特定文件夹中。

我的问题是,我可以让 ocra 创建的最终 .exe 文件做同样的事情吗?

当前的问题是当我运行以下命令时:

ocra myscript.rb use_this_folder/

然后将生成的“myscript.exe”移动到另一个“use_this_folder”副本所在的其他位置,它无法识别该文件夹。

在我的红宝石脚本的顶部,我放置了:

$:.unshift File.dirname($0)
Dir.chdir File.dirname($0)

希望这一切都有意义。任何帮助是极大的赞赏。

4

1 回答 1

1

如果我理解正确,您的程序很难找到您的文本文件所在的目录。我猜您的输入和输出文件夹位于您要运行的 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"

如果它是一个 ocra exe 文件,这if ENV["OCRA_EXECUTABLE"]是一段代码询问是否更改目录。如果没有 if 语句,环境变量是 nil 并且Dir.chdir会抛出异常,因为它不能将目录更改为 nil。

时间有点短,但希望这会有所帮助。祝你好运。

于 2016-03-09T21:48:28.117 回答