2013-01-10 20 views
0

我必須通過幾個請求從網上下載文件。每個請求的下載文件必須放在與請求編號同名的文件夾中。我可以使用Ruby1.9在運行時創建具有動態名稱的目錄嗎?

例如:

我的劇本現在正在運行下載文件的請求數量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) 
+2

您的操作方法與創建具有「靜態」名稱的目錄/文件完全相同。 –

+0

任何人都可以幫助我嗎? – CodeLover

+0

將您的Python代碼轉換爲Ruby是一項非常簡單直接的任務,您不需要任何幫助。只需調查['File'](http://www.ruby-doc.org/core-1.9.3/File.html)和['Dir'](http:// www。 ruby-doc.org/core-1.9.3/Dir.html)類。 –

回答

2

可以同時進行多個下載?如果是這樣,你需要一些可以隨機創建數字的東西,而不會有碰撞的機會。

看看Ruby的Tempfile模塊,它可以做你正在談論的東西,特別是open方法。

管理臨時文件的實用工具類。當您創建一個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 

也讀到「顯式關閉」和「創建後取消鏈接」的文件。

無論你做什麼,給定文件夾中存在的文件越多,系統或代碼生成唯一文件名所用的時間就越長。

您也可以使用數據庫來跟蹤序列號。

而且,「Generate unique filenames」也談到了這個問題,有很多解決方案。最好的可能是在* nix系統上使用uuidgen

uuidgen命令生成一個通用唯一標識符(UUID),一個128位的值保證在空間和時間上都是唯一的。

+0

是的。你是對的。我必須通過腳本從600個請求表格下載'10000 +'文件。爲了審計目的,我必須將它們保存在單獨的文件夾中。因此,我需要動態創建文件夾,並且文件夾的名稱將爲「當前下載+ requestnumber」,正如我在描述中提到的那樣。我需要將這些文件永久存儲在本地磁盤中以供審覈。 – CodeLover

+1

如果您閱讀文檔,它可讓您即時指定文件夾名稱。這些文件可以自動刪除,或者不是,它取決於您,並且受您設置代碼的方式控制。請參閱「顯式關閉」部分。 –

+0

'+ 1'的建議!有趣的是'你可以使用數據庫'。我可以從這裏得到一些解釋嗎? – CodeLover

相關問題