【问题标题】:How to bundle file folders with Ocra如何使用 Ocra 捆绑文件夹
【发布时间】:2014-05-15 17:53:08
【问题描述】:

我想知道以下是否可行:

我创建 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)

希望这一切都有意义。非常感谢任何帮助。

【问题讨论】:

    标签: ruby gem ocra


    【解决方案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"
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 2018-03-22
      • 2014-06-30
      • 2011-02-02
      相关资源
      最近更新 更多