1 файл туда, второй туда и т.д.
После расстановки всего этого добра нажимаем кнопку "start" и процесс пошел, копирую все это дело как-то так...
viewtopic.php?f=2&t=40407
Естественно что на время выполнения таким вот образом прога падает в глубокий ступор.
Я могу заменить циклы- счетчиками, командами, включенным таймером
- Код: Выделить всё
Public f1n As String
Public f2n As String
Public bytesread, blocksize As Integer
Public bytes(0) As Byte
Public testf As System.IO.BinaryReader
Public testf1 As System.IO.BinaryWriter
Public frazm As Long
Public k As Long
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Копирование
f1n = TextBox1.Text
f2n = "C:\rrr.rrr"
k = 0
Dim fa = New System.IO.FileInfo(f1n)
frazm = fa.Length
ProgressBar1.Maximum = 100
ProgressBar1.Minimum = 0
blocksize = 1024 * 100
ReDim bytes(blocksize - 1)
Dim ascii = System.Text.Encoding.GetEncoding(0)
testf = New System.IO.BinaryReader(System.IO.File.Open(f1n, IO.FileMode.Open, IO.FileAccess.Read), ascii)
testf1 = New System.IO.BinaryWriter(System.IO.File.Open(f2n, IO.FileMode.Create, IO.FileAccess.Write), ascii)
Timer1.Enabled = True
Me.Text = k.ToString
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Array.Clear(bytes, 0, blocksize)
bytesread = testf.Read(bytes, 0, blocksize)
If bytesread = blocksize Then
testf1.Write(bytes)
k = k + blocksize
ElseIf bytesread < blocksize Then
For i = 0 To bytesread - 1
testf1.Write(bytes(i))
k = k + 1
Next
'все на закрытие
testf.Close()
testf1.Close()
Timer1.Enabled = False
End If
ProgressBar1.Value = (k / frazm) * 100
Me.Text = k
End Sub
Она даже с прогрессбаром работает... Но прога намного сложнее приведенной, и она перед копированием смотрит есть ли уже файл с таким именем, если есть, проверяет побайтово оба файла, и если они различны, то рисует ему новое имя, и перед копированием снова проверяет на новое имя. (А дубликаты будут, и много), и как это все на таймер повесить, чтобы куча прогрессбаров бегало я не знаю.
Возникла мысль сделать две программки- одна создает задания и т.д. а при кнопке пуск- задания кидаются в файл, запускается вторая прога в инвизе вытворяет все по моему алгоритму и в процессе пишет файл отчета, давая чтение основной программе и уже основная программа ориентируясь на этот файл рисует скроллбары и т.д.
Но не получится так, что зависшая прога станет в статус "не отвечает" и к чему это может привести с XP и Vista.... или может есть еще какие-то варианты?
Да и не хочется лишний раз к винту обращаться... итак долго и много....
Что скажете? Как это реализуется в антивирусах, даунлоад менеджерах и т.д.... неужто все правда на таймерах и счетчиках?