2013-12-18 72 views
8

我試圖將文件從一個文件夾複製到另一個文件夾中,然後記錄複製到日誌文件中的所有文件的名稱。兩個文件夾都在同一個目錄中,我通過命令行獲取該路徑。在我目前發生的程序中,通過Ruby:Dir.glob沒有返回任何文件

argument3 = ARGV[2] + "\\" 

它成功地成爲'c:\ user \ alexander \ desktop \'。 然後我將文件複製我的桌面上到一個文件夾已經在桌面上用

​​

這也成功完成,這是我從CMD輸出和檢查文件夾本身驗證。最後,我試圖將文件名保存到路徑爲'c:\ user \ alexander \ desktop \ log.txt'的日誌文件中。我試圖通過使用

logFile = "c:\\user\\alexander\\desktop\\log.txt" 
Dir.glob(argument3 + "*.*").each do |fileName| 
    File.open(logFile, 'a') {|file| file << "\n" + fileName} 
end 

這沒有做什麼,並使我的logFile爲空。我試圖通過將File.open選項更改爲'w'而不是'a'來解決此問題,但仍然沒有任何結果。然後我認爲我必須正確實施它,所以我試着把

Dir.glob(argument3 + "*.*").each do |fileName| 
    puts fileName 
end 

作爲一個完整性檢查,但是這也不會輸出任何內容。我正試圖完成什麼?如果是這樣,我做錯了什麼,如果不是有另一種方法來做到這一點?

編輯1: 更改Dir.glob參數

Dir.glob("*") 

正在成爲當前目錄下的文件寫入日誌。我想這意味着我必須有一些看不見的錯字在我的參數3變,但是當我做

puts argument3 + "*" 

其輸出C:\用戶\亞歷山大\桌面*我試圖串聯的文件路徑之前,我通過它作爲參數傳遞給Dir.glob as

filePath = argument3 + "*" 
Dir.glob(argument3 + "*.*").each do |fileName| 
    File.open(logFile, 'a') {|file| file << "\n" + fileName} 
end 

它仍然沒有按照我的預期工作。是否有一些技巧將確切的文件路徑傳遞給Dir.glob?我不能保證程序總是在它運行時需要複製的目錄中。

+0

這應該工作 - 如果參數3關閉(我知道你的副本,例如工作),什麼是'把Dir.glob(「*」)to_s'輸出? – Matt

+0

我放了'puts Dir.glob('*')。to_s',它返回了我當前目錄中的所有文件。在我的'.each do | fileName |'循環中放入Dir.glob('*')仍然不會輸出任何內容,但我也嘗試將'fileName.to_s'放入。有什麼我缺少關於'Dir.glob'如何工作? –

+0

不,我不這麼認爲 - Dir.glob('*'){| f |放f''? – Matt

回答

11

Dir.glob不帶反斜槓。代替他們正斜槓,即使在Windows上:

logFile = "c:\\user\\alexander\\desktop\\log.txt" 
Dir.glob(argument3.gsub('\\','/') + "*.*").each do |fileName| 
    File.open(logFile, 'a') {|file| file << "\n" + fileName} 
end 
+0

這就是我缺少的知識。這使一切按預期工作。感謝您的幫助 –

+0

很高興它的工作原理 - 對不起,到了那裏 - 我使用Mac/Linux :) – Matt

+0

沒問題,任何幫助是好的 –

0

嘗試一個明星:

logFile = "c:\\user\\alexander\\desktop\\log.txt" 
Dir.glob(argument3 + "*").each do |fileName| 
    File.open(logFile, 'a') {|file| file << "\n" + fileName} 
end 
+0

只使用一個星形使得Dir.glob獲取當前目錄中的所有文件名,但沒有我是嘗試可以使其進入不同的目錄並在那裏獲取文件名。 Dir.glob是否只允許您訪問當前目錄中的文件? –

2

Dir.glob似乎不能夠採取的文件路徑,只接受文件的方式來尋找當前目錄。解決方法我有是用Dir.chdir移動到DIR我的需要,然後使用Dir.glob(「」),它獲取所需的輸出