Ruby/CMD:Ruby什么时候停止';使用';档案?

Ruby/CMD:Ruby什么时候停止';使用';档案?,ruby,cmd,Ruby,Cmd,我正在编写一个混合使用ruby和批处理编程的代码(事实上,我知道这并不是最聪明的想法,但我在cmd方面有更多的经验,遗憾的是,我的任务是用ruby解决这个问题。) 我面临一个奇怪的问题,在第一次运行ruby文件(干净,没有创建其他外部文件)时,我会遇到错误“进程无法访问该文件,因为它正被另一个进程使用” 然而,在随后的运行中(数据库文件已经与.rb文件位于同一目录中),我没有收到相同的错误,程序运行得很完美 以下是我正在运行的代码示例: if someCondition File.open(

我正在编写一个混合使用ruby和批处理编程的代码(事实上,我知道这并不是最聪明的想法,但我在cmd方面有更多的经验,遗憾的是,我的任务是用ruby解决这个问题。)

我面临一个奇怪的问题,在第一次运行ruby文件(干净,没有创建其他外部文件)时,我会遇到错误“进程无法访问该文件,因为它正被另一个进程使用”

然而,在随后的运行中(数据库文件已经与.rb文件位于同一目录中),我没有收到相同的错误,程序运行得很完美

以下是我正在运行的代码示例:

if someCondition
  File.open('database.csv','a+') { |f|
    f.puts ic.to_s + "," + tix.to_s
  }
else # if the database does contain
  system 'RENAME database.csv tempin.txt'
  write_handler = File.new("TEMPORARY.txt", "w") 
  write_handler.puts(ic).to_s
  write_handler.close

  write_handler = File.new("temp.bat","w")
  write_handler.puts('@ECHO off
                      SET /P MYVAR=<TEMPORARY.txt
                      findstr /v "%MYVAR%" tempin.txt > tempout.txt
                      ERASE tempin.txt
                      RENAME tempout.txt database.csv')
  write_handler.close

  system 'temp.bat
          ERASE temp.bat'
end
…是导致“进程无法访问文件,因为它正被另一个进程使用”的原因,因为这可能意味着ruby当前正在“使用”数据库文件,从而导致cmd无法“使用”它

然而,这并不能解释为什么在后续的运行中(database.csv已经就位),我不会遇到错误,整个文件运行平稳

我怀疑这与我正在使用的读/写权限有关(顺便说一句,我使用+是因为我想在csv文件中附加数据,而不是替换数据。)


如果有人能告诉我什么是错误的,以及为什么在一次干净的运行中它失败了,但在随后的运行中它没有失败,我将不胜感激。

您使用的
文件的块形式。open
在“}”处关闭文件
文件的块形式。open
您使用的在“}”处关闭文件正在使用的
File.open
的块形式在“}”处关闭文件
File.open('database.csv','a+') {...