2

次のことが可能かどうかを知りたいだけです。

ruby 実行可能ファイルを作成する私の目標は、Ruby スクリプトに移植性を追加できるようにすることでした。スクリプトが行うことは、特定のディレクトリに配置されたいくつかの .txt ファイルを収集し、それらを処理して別のファイル ディレクトリに .txt の結果を出力することです。

スクリプトが現在の作業ディレクトリにある特定のファイル フォルダー名を検索し、その中に配置されたすべての .txt を処理し、その結果を別の特定のファイル フォルダーに出力するだけなので、ocra がなければ、これは私のスクリプトで問題なく動作します。

私の質問は、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"]

たとえば、別のドライブのルートにあるフォルダー名「MyProgram」にあるexeを含むこのスクリプト:

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 に変更できないため、例外がスローされます。

少し時間がかかりますが、これが役立つことを願っています。幸運を。

于 2016-03-09T21:48:28.117 に答える