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

时间:2015-06-20 16:58:54

标签: ruby cmd

我正在编写一个使用红宝石和批量编程混合的代码(事实上,我知道这并不是最明智的想法,但我对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字符串&#39;将其写入txt文件,然后由cmd将其读取到变量MYVAR。然后,使用findstr,它会在写入输出文件之前删除包含%MYVAR%的所有行。 (我这样做是为了确保数据库中没有重复的条目。)

我怀疑......

File.open('database.csv','a+') {...

..导致&#34;该进程无法访问该文件,因为它正在被另一个进程使用&#34;,因为这可能意味着ruby目前正在使用&#39;数据库文件,导致cmd无法使用&#39;它

然而,这并没有解释为什么在后续运行(database.csv已经到位),我没有遇到错误,整个文件运行顺利。

我怀疑这与我正在使用的读/写权限有关(作为旁注,我使用的是+因为我想追加,而不是替换我的csv文件中的数据。)

如果有人可以告诉我什么是错的,我会非常感激,为什么在干净的运行中它会失败,但在随后的运行中却没有。

0 个答案:

没有答案