!Viper! писал(а):2. Сей код будет выполнятся для каждого байта открытого файла. Т.е. 1 073 741 824 раз. Многовато пожалуй
GSerg писал(а):Так.
Что за бред?
Чё за for i=1 to EOF? Это типа какой язык?
Автору рекомендуется прийти и прояснить ситуацию. Прочитав http://bbs.vbstreets.ru/viewtopic.php?t=23315 предварительно.
MSDN писал(а):EOF. Returns anInteger containing theBoolean value True when the end of a file opened for Random or sequential Input has been reached.
Option Explicit
Private Declare Function GetTickCount& Lib "kernel32" ()
Private Sub Form_Load()
Dim tmparr() As Byte
Dim flen As Long
Const N As Integer = 10 'число частей
Dim part As Long, rest As Long 'байт в каждой части + остаток
Const CutStart As Long = 270336 '42000h
Dim i As Long
Dim time1 As Long, time2 As Long
time1 = GetTickCount
flen = FileLen("C:\test.iso") - CutStart
part = Fix(flen / N)
rest = flen Mod N
'part*N+rest=flen
'Вырезаем кусок 0-270336
Open "C:\test.iso" For Binary As #1
Open "C:\test2.iso" For Binary As #2
For i = 1 To N
ReDim tmparr(part)
Get #1, CutStart + 1 + part * (N - 1), tmparr
Put #2, 1 + part * (N - 1), tmparr
DoEvents
Next i
If rest <> 0 Then
ReDim tmparr(rest)
Get #1, flen + CutStart - rest + 1, tmparr
Put #2, flen - rest + 1, tmparr
End If
Close #2
Close #1
'Вырезаем из нового файла из каждого куска по 528 байт 512 байт
flen = FileLen("C:\test2.iso")
ReDim tmparr(512)
Open "C:\test2.iso" For Binary As #1
Open "C:\result.iso" For Binary As #2
For i = 1 To flen \ 528
Get #1, 528 * (i - 1) + 1, tmparr
Put #2, 512 * (i - 1) + 1, tmparr
DoEvents
Next i
Close #2
Close #1
time2 = GetTickCount&
MsgBox "Процесс занял " & (time2 - time1) / 1000 & " секунд."
End Sub
Explorer писал(а):1,06 ГБ (1 139 734 528 байт)
!Viper! писал(а):О горе мне!!! EOF c LOF спутал... Хотя конечно первым спутал автор
З.Ы, А интересно длину какого файла он таким образом пытался определить. Нумера файла то у него нет
Option Explicit
Private Declare Function GetTickCount& Lib "kernel32" ()
Private Sub Form_Load()
Dim tmparr() As Byte
Dim flen As Long
Const N As Integer = 10 'число частей
Dim part As Long, rest As Long 'байт в каждой части + остаток
Const CutStart As Long = 270336 '42000h
Dim i As Long
Dim time1 As Long, time2 As Long
time1 = GetTickCount
'Вырезаем из нового файла из каждого куска по 528 байт 512 байт
flen = FileLen("C:\test.iso") - CutStart
ReDim tmparr(512)
Open "C:\test.iso" For Binary As #1
Open "C:\result.iso" For Binary As #2
For i = 1 To flen \ 528
Get #1, CutStart + 528 * (i - 1) + 1, tmparr
Put #2, 512 * (i - 1) + 1, tmparr
DoEvents
Next i
Close #2
Close #1
time2 = GetTickCount&
MsgBox "Процесс занял " & (time2 - time1) / 1000 & " секунд."
End Sub
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 170