Шоу Ruby прогрессирует при копировании файлов

В cellForRow вы должны установить cell.delegate = self, чтобы эта логика начала работать. Недостаточно просто заставить ваш контроллер взаимодействовать с вашим пользовательским протоколом делегирования ячейки. Из вашего поста я предполагаю, что delegate всегда находится в ячейке nil, поэтому он не работает.

8
задан DEfusion 19 March 2009 в 11:55
поделиться

3 ответа

Поскольку у меня нет достаточного количества представителя для редактирования ответов все же, вот моя версия на основе ответа pisswillis, я нашел драгоценный камень индикатора выполнения, который я также использую в своем примере. Я протестировал это, и это работало хорошо до сих пор, но это могло сделать с некоторой чисткой:

require 'rubygems'
require 'progressbar'

in_name     = "src_file.txt"
out_name    = "dest_file.txt"

in_file     = File.new(in_name, "r")
out_file    = File.new(out_name, "w")

in_size     = File.size(in_name)
# Edit: float division.
batch_bytes = ( in_size / 100.0 ).ceil
total       = 0
p_bar       = ProgressBar.new('Copying', 100)

buffer      = in_file.sysread(batch_bytes)
while total < in_size do
 out_file.syswrite(buffer)
 p_bar.inc
 total += batch_bytes
 if (in_size - total) < batch_bytes
   batch_bytes = (in_size - total)
 end
 buffer = in_file.sysread(batch_bytes)
end
p_bar.finish
14
ответ дан 5 December 2019 в 06:10
поделиться

Самокрутка с помощью IO.syswrite, IO.sysread.

Во-первых, решите длину индикатора выполнения (в символах).. затем этот псевдо код должен сделать это (НЕ ПРОТЕСТИРОВАННЫЙ):

infile = File.new("source", "r")
outfile = File.new("target", "w")

no_of_bytes = infile.length / PROGRESS_BAR_LENGTH

buffer = infile.sysread(no_of_bytes)
while buffer do
 outfile = syswrite(buffer)
 update_progress_bar()
 buffer = infile.sysread(no_of_bytes)
end

где update_progress_bar () является Вашим методом для постепенного увеличения индикатора выполнения одним символом. Вышеупомянутое не тестируется и вероятно сделает рубиновых пуристов плохо. В особенности EOFException мог бы испортить цикл. Также Вам будет нужен некоторый способ удостовериться, что все байты записаны, если no_of_bytes не является целым числом.

7
ответ дан 5 December 2019 в 06:10
поделиться

Или Вы могли просто взломать его для использования scp, если это - индикатор выполнения, Вам нравится:

def copy(source, dest)
  `scp #{source} localhost:#{dest}`
end

Необходимо будет удостовериться, источника и имен dest правильно оставляют для системного вызова. localhost: тег заставляет scp скопировать файлы, как он делает между компьютерами, таким образом, он покажет индикатор выполнения.

6
ответ дан 5 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: