Я хотел бы написать простое программное обеспечение для резервного копирования (на основе синхронизации) для себя.
План:
- Запуск программного обеспечения
- Подключение внешнего накопителя
- Приложение обнаруживает новый диск (через WMI) и сразу же ЗАБЛОКИРУЕТ это с помощью параметра (FSCTL_LOCK_VOLUME).(Предотвращение любой другой программы, которая должна иметь возможность изменять любые файлы на диске, например, вирус ..)
- Сравните размеры и даты файлов с исходными файлами.(FileRead, FileWrite), Копирование файла, если необходимо.
- Отключите внешний диск.
Я застрял в пункте 4. Не могу записать файл, пока диск заблокирован.
Мой код:
Dim hVol As IntPtr
Dim status As UInteger
hVol = CreateFile("\\.\H:", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
DeviceIoControl(hVol, FSCTL_LOCK_VOLUME, IntPtr.Zero, 0, Nothing, 0, status, Nothing)
DeviceIoControl(hVol, FSCTL_DISMOUNT_VOLUME, IntPtr.Zero, 0, Nothing, 0, status, Nothing)
Dim buff(4096) As Byte
Const iBufSize As Integer = 4096
Dim dwBytesRead = 0
Dim dwBytesWritten = 0
Do
If ReadFile(hVol, buff, iBufSize, dwBytesRead, IntPtr.Zero) = -1 Then Exit Do
If dwBytesRead = 0 Then Exit Do
Debug.WriteLine(Text.Encoding.UTF8.GetString(buff))
Loop While True
Это бесконечный цикл.Как можно разделить байты в файл с именем файла, расширением ...?
Я использую VisualBasic с .NET2.0 в Windows 7.