方法Dir.mkdir抛出Errno :: EACCES

时间:2013-11-18 16:26:30

标签: ruby file io permissions

我的代码中有一个奇怪的,重复出现的错误。很少,方法Dir.mkdir抛出`mkdir': Permission denied - <file_name> (Errno::EACCES),令人惊讶的是,有时它只是起作用(代码中没有任何单一更改或任何其他内容)。

以下是代码:

    data.each_with_index do |row, index|

      #Make directory for each row:
      row_name = "row_#{index}";
       #Dir.rmdir just in-case, same error occurs without it.
      (FileUtils.rm_r(row_name) || Dir.rmdir(row_name)) if File.exist?(row_name) #Remove previous directory
      Dir.mkdir(row_name);
      row.each_with_index do |(key, value), index|
        #Make file for every record
        File.open("#{row_name}/#{index}.rtf", 'w') do |f|

        f.write value

        f.close #Just in-case, even though it's automatically called(no change without it)

        end    
      end
  end  

错误很少发生(执行此代码大约每4次一次)。

其他:

  • Wndows 7平台
  • 执行时未访问任何文件
  • 以管理员身份使用CMD。

为什么即使没有对代码进行任何更改,我也会收到此错误? 可能来自过度创建目录吗?(每次执行平均创建约60个目录)

1 个答案:

答案 0 :(得分:1)

问题是由操作系统阻止脚本过快删除文件引起的,解决方法是在进入循环之前删除所有文件。工作得很好。