我正在编写一个使用红宝石和批量编程混合的代码(事实上,我知道这并不是最明智的想法,但我对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文件中的数据。)
如果有人可以告诉我什么是错的,我会非常感激,为什么在干净的运行中它会失败,但在随后的运行中却没有。