Errno :: EMFILE - 打开第一个文件时“打开文件太多@ rb_sysopen”

时间:2017-01-05 23:19:16

标签: ruby

我有一个使用ruby 2.2.3的应用程序。对于大多数用户来说,应用程序工作正常,但对于2个用户,他们遇到错误“太多打开的文件@ rb_sysopen - C:\ Users \ Samuel \ AppData \ Roaming \ Oneshot \ save.dat(Errno :: EMFILE)”< / p>

这发生在游戏试图从ruby级别写入的第一个文件上。我让受影响的用户运行进程资源管理器来检查程序打开了多少文件句柄,但它最多只打开30个,所以我认为它们实际上没有太多打开的文件。该目录存在于用户的计算机上,因此它也不是问题。有没有人有任何想法可能导致抛出此错误?

这是导致问题的ruby代码,我认为它没有任何问题(它在打开时正确,而不是在转储期间):

def save
  if ($game_variables[3] == 0) #don't save if intro variable isn't set
    return
  end
  File.open(SAVE_FILE_NAME, 'wb') do |file|
    # Wrire frame count for measuring play time
    Marshal.dump(Graphics.frame_count, file)
    # Increase save count by 1
    $game_system.save_count += 1
    # Save magic number
    # (A random value will be written each time saving with editor)
    $game_system.magic_number = $data_system.magic_number
    # Write each type of game object
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
    Marshal.dump($game_followers, file)
    Marshal.dump($game_oneshot, file)
    Marshal.dump($game_fasttravel, file)
    Marshal.dump($game_temp.footstep_sfx , file)
  end
  save_perma_flags
end

0 个答案:

没有答案