【问题标题】:Permission denied @ rb_sysopen (Errno :: EACCES) error when trying to execute Ruby program via RubyMine 2019.1尝试通过 RubyMine 2019.1 执行 Ruby 程序时出现 Permission denied @ rb_sysopen (Errno :: EACCES) 错误
【发布时间】:2019-04-17 04:53:20
【问题描述】:

我正在尝试在 Windows 10 上执行一个 Ruby 程序 (Ruby v2.5.3),我基本上打开一个文件 (sample1.txt, sample2.txt) 并将其内容(3 个名称的列表)附加到一个空文件 (result.txt),然后对内容进行排序文件result.txt(下面的整个代码)。但是,当我在 RubyMine 2019.1 上运行此代码时,我收到一个错误

Traceback (most recent call last):
        6: from C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:5:in `<main>'
        5: from C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:5:in `each'
        4: from C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:7:in `block in <main>'
        3: from C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:7:in `each'
        2: from C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:8:in `block (2 levels) in <main>'
        1: from C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:8:in `open'
C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb:8:in `initialize': Permission denied @ rb_sysopen - result.txt (Errno::EACCES)

所有文件都具有完全权限。但是,当我通过 IRB 终端执行相同的代码时,它工作得非常好。

我刚刚开始研究 Ruby,但在任何地方都找不到解决此问题的方法。非常感谢您的帮助。

file_array = ["sample1.txt", "sample2.txt"]

file_array.each do |x|
  file = File.open(x,'r')
  file.each do |h|
  open('result.txt', 'a') do |f|
    puts f << h
  end
  end
  open('result.txt','a') do |f|
    puts f << "\n"
  end
  end

new_array = File.readlines('result.txt').sort
File.open('result.txt','w') do |file|
  new_array.each {|n| file.puts(n)}
end

【问题讨论】:

  • 你的项目目录在哪里?在Desktop 文件夹上?
  • 它在C:/Users/tanveer.dey/RubymineProjects/src/Assignment9.rb
  • 尝试将项目移动到C:/,然后执行代码。
  • 这也会导致同样的错误。

标签: ruby windows-10 rubymine ruby-2.5


【解决方案1】:

找到了解决办法!出现此问题的原因是文件result.txt(内容被“写入”到其中)被指定为“带有”扩展名(.txt)。从涉及写入的文件操作中删除扩展名可以解决问题。下面没有扩展的代码现在可以完美运行。


file_array.each do |x|
  file = File.open(x,'r')
  file.each do |h|
  open('result', 'a') do |f|
    puts f << h
  end
  end
  open('result','a') do |f|
    puts f << "\n"
  end
  end

new_array = File.readlines('result').sort
File.open('result','w') do |file|
  new_array.each {|n| file.puts(n)}
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2021-01-31
    • 2014-07-31
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多