0

いくつかのリクエストでWebからファイルをダウンロードする必要があります。各リクエストのダウンロードファイルは、リクエスト番号と同じ名前のフォルダに配置する必要があります。

例えば:

スクリプトは、リクエスト番号87665のファイルをダウンロードするために実行されています。したがって、ダウンロードされたすべてのファイルは、宛先フォルダーに配置されますCurrent Download\Attachment87665。では、どうすればよいですか?

宛先フォルダ: Current Download修正されました。Attachmentxxxxxx動的に作成する必要があるxxxxxx任意のリクエスト番号だけです。

これはPythonバージョンのコードです: しかし、私が探しているものを理解するための参考のために、Rubyでそれを望んでいます

request_number = 82673

# base dir
_dir = "D:\Current Download"       

# create dynamic name, like "D:\Current Download\Attachment82673"
_dir = os.path.join(_dir, 'Attachment%s' % request_number)

# create 'dynamic' dir, if it does not exist
if not os.path.exists(_dir):
    os.makedirs(_dir)
4

2 に答える 2

2

を使用しDir.mkdir("#{Rails.root}/#{whatever}/#{example.join('bla')}")ます。
http://www.ruby-doc.org/core-1.9.3/Dir.html#method-c-mkdir

于 2013-01-10T04:48:46.233 に答える
2

一度に複数のダウンロードが発生する可能性はありますか?もしそうなら、衝突の可能性なしにランダムに番号を作成できるものが必要です。

あなたが話していること、特にopenメソッドを実行するために作られたRubyのTempfileモジュールを見てください。

一時ファイルを管理するためのユーティリティクラス。Tempfileオブジェクトを作成すると、一意のファイル名で一時ファイルが作成されます。

require 'tempfile'

file = Tempfile.new('foo')
file.path      # => A unique filename in the OS's temp directory,
            #    e.g.: "/tmp/foo.24722.0"
            #    This filename contains 'foo' in its basename.
file.write("hello world")
file.rewind
file.read      # => "hello world"
file.close
file.unlink    # deletes the temp file

「明示的なクローズ」と「作成後のリンク解除」に関するドキュメントもお読みください。

何をするにしても、特定のフォルダに存在するファイルが多いほど、システムまたはコードが一意のファイル名を生成するのにかかる時間が長くなります。

データベースを使用して、シリアル番号を追跡することもできます。

そして、「一意のファイル名を生成する」では、この問題についても多くの解決策について説明しています。おそらくuuidgen、*nixシステムで使用するのが最善です。

uuidgenコマンドは、Universally Unique IDentifier(UUID)を生成します。これは、空間と時間の両方で一意であることが保証されている128ビット値です。

于 2013-01-10T06:26:32.603 に答える