Ruby - 如何在下一个操作之前等待文件完成移动?

时间:2017-09-01 23:09:59

标签: ruby windows

我有一个正在阅读excel电子表格的脚本。每个文件在打开之前都会被复制到一个新位置,从而确保文件中没有其他人同时存在。奇怪的是,有时我的脚本会中断,因为文件无法在新位置找到。

# copy the file to a new destination
# the file is originating on a windows file server, 
# the destination is my local downloads folder on a windows machine.  
FileUtils.cp(some_filepath, destination_path)
# the next line gives an error, because the file doesnt exist at its location yet
Spreadsheet.open(file_at_new_destination) 

我尝试过一个until块,在脚本继续之前进行检查以查看文件是否存在,但即使这样也不起作用,只是永远运行。

# check if file exists
until File.exist?(file_at_new_destination) do
  print '.'
end

如何确保脚本不会继续运行而文件已完成移动?

这是我在rake任务中出现的错误

rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen -
C:\Users\ALilland\Downloads\tmp_dest\102035 Western Digital Job Status Reports.xls

1 个答案:

答案 0 :(得分:1)

Ruby是单线程的,您不必等待文件被复制到目标路径。

在复制包含所有子目录的目录时,使用 cp_r 而不是 cp

# copy directory to destination directory recursively.    
FileUtils.cp_r(some_filepath, destination_path)
if File.exist?(file_at_new_destination)
 Spreadsheet.open(file_at_new_destination)
end