Сначала я написал на vb6 такую программку
- Код: Выделить всё
Option Explicit
Sub Main()
Dim b(65535) As Byte
Dim nf1 As Long, nf2 As Long, p As Long
On Local Error Resume Next
nf1 = FreeFile
Open "f:\1.wmv" For Binary As #nf1 ' Это DVD
nf2 = FreeFile
Open "d:\1.wmv" For Binary As #nf2 ' Это HDD
Do While Not EOF(nf1)
DoEvents
Get #nf1, , b()
Put #nf2, , b()
Loop
Close
MsgBox "Ready"
End Sub
Понятно, что должен получиться файл чуть больше нужного, я планировал потом урезать размер.
Но, что естественно, я упёрся в 2Гб предел. Вроде бы можно через API это обойти, и я даже что-то такое читал тут на сайте, но есть же современное средство - vb.net
Я написал такую программку:
- Код: Выделить всё
Option Strict Off
Option Explicit On
Module Модуль1
Public Sub Main()
Dim nf2, nf1 As Integer
Dim p As Long
Dim b() As Byte
On Error Resume Next
nf1 = FreeFile()
FileOpen(nf1, "f:\1.wmv", OpenMode.Binary, OpenAccess.Read)
nf2 = FreeFile()
FileOpen(nf2, "d:\1.wmv", OpenMode.Binary, OpenAccess.Write)
ReDim b(&H1000000 - 1)
p = 1
Do
System.Windows.Forms.Application.DoEvents()
FileGet(nf1, b)
FilePut(nf2, b)
p = p + &H1000000
If LOF(nf1) - p < &H1000000 Then
ReDim b(LOF(nf1) - p - 1)
FileGet(nf1, b)
FilePut(nf2, b)
Exit Do
End If
Loop
FileClose()
MsgBox("Ready")
End Sub
End Module
Тут уже учтён точный размер файла, но почему оно так тормозит??? Программа на vb6 до 2Гб дошла за три минуты, эта добралась до 3.5Гб за час, а дальше мне пришлось её остановить потому, что нужно было уходить и выключать компьютер.