2016-08-03 7 views
0

Ich versuche, ein Programm zu schreiben, um etwa 100 Kopien eines Ordners mit jeweils einem anderen Namen, aber im selben Verzeichnis zu erstellen. Hier ist der Code Ich habe bisher:Ruby FileUtils.mkdir Fehler

require 'fileutils' 

filename = "C:/Users/drwat/Desktop/somefolder/accountusernames.txt" 
times = IO.readlines(filename).size 
counter = 0 
password = "changethis" 

originalFolder = "Release/." 

while(counter < times) 
    begin 
     currentusername = IO.readlines(filename)[counter] 

     FileUtils.mkdir currentusername 
     FileUtils.cp_r(originalFolder, "#{currentusername}") 

     #Put username into auth.json file 
     data = File.read("auth.json") 
     filtered_data = data.gsub("aaaa", "#{currentusername}") 
     File.open("auth.json", "w") do |f| 
      f.write(filtered_data) 
     end 

     #Put password into auth.json file 
     data = File.read("auth.json") 
     filtered_data = data.gsub("bbbb", "#{password}") 
     File.open("auth.json", "w") do |f| 
      f.write(filtered_data) 
     end 

     FileUtils.cp "auth.json", "#{currentusername}/Config" 

     #Revert auth.json file back to A's and B's 
     data = File.read("auth.json") 
     filtered_data = data.gsub("#{currentusername}", "aaaa") 
     File.open("auth.json", "w") do |f| 
      f.write(filtered_data) 
     end 
     data = File.read("auth.json") 
     filtered_data = data.gsub("#{password}", bbbb) 
     File.open("auth.json", "w") do |f| 
      f.write(filtered_data) 
     end 

     counter += 1 
    end 
end 

Die Störung, die ich erhalte, wenn ich das Programm ausführen:

D:/Installed Programs/Ruby200-x64/lib/ruby/2.0.0/fileutils.rb:245:in `mkdir': Invalid argument - twitchypair1 (Errno::EINVAL) 
     from D:/Installed Programs/Ruby200-x64/lib/ruby/2.0.0/fileutils.rb:245:in `fu_mkdir' 
     from D:/Installed Programs/Ruby200-x64/lib/ruby/2.0.0/fileutils.rb:174:in `block in mkdir' 
     from D:/Installed Programs/Ruby200-x64/lib/ruby/2.0.0/fileutils.rb:173:in `each' 
     from D:/Installed Programs/Ruby200-x64/lib/ruby/2.0.0/fileutils.rb:173:in `mkdir' 
     from D:/somefolder/thiscode.rb:14:in `<main>' 

Ich weiß nicht, ob es etwas falsch mit meinem Code oder meiner Installation von Rubin oder was. Ich habe ein paar verschiedene Möglichkeiten ausprobiert, um es zum Laufen zu bringen, wie zum Beispiel die Datei FileUtils.mkdir zu entfernen, aber ich kann es nicht bekommen. Das gibt mir nur einen weiteren Fehler. Jede Hilfe würde sehr geschätzt werden. Ich habe mit Ruby nicht viel gemacht, aber es scheint sehr einfach zu sein, abgesehen davon.

Geben auch "# {currentusername}" und currentusername genau dasselbe zurück?

+1

'# {x}' und 'x' sind im Allgemeinen äquivalent * wenn *' x' ein Zeichenfolgenwert ist. Für andere entspricht es in etwa "x.to_s". – tadman

+1

Auch nicht klar, warum Sie eine 'begin ... end'-Struktur in der Mitte haben dort ohne besonderen Zweck. – tadman

+0

Ist es möglich, dass Sie eine Datei mit dem Namen des Verzeichnisses haben, das Sie erstellen möchten? – tadman

Antwort

0

Also, so etwas wie dies funktionieren soll:

require 'fileutils' 

filename = "C:/Users/drwat/Desktop/somefolder/accountusernames.txt" 
times = IO.readlines(filename).size 
counter = 0 
password = "changethis" 

originalFolder = "Release/." 

IO.readlines(filename).chomp.each \ 
{|currentusername| 
    FileUtils.mkdir currentusername 
    ... 
} 

Wie ich schon erwähnt, ist es fast immer eine gute Idee() Daten in einer Datei chomp, dass Carriage Return/Zeilenvorschub aus den Quelldaten zu entfernen.