我正在编写一个程序,定期(按计划)备份/格式化硬盘。在格式化过程中,我有一个第二个(相同的)驱动器,它将占据它的位置。我想要做的是锁定要格式化的驱动器(让我们说F:\)和(这部分是可选的......)将任何流量从F:\重定向到另一个驱动器(让我们说G:\)。 / p>
那么,有没有办法使用C#我可以“锁定”F:\驱动器,以便没有人可以读/写它?我不希望有人在格式运行之前尝试写入驱动器。就我的目的而言,关键是不能写入驱动器,但我更喜欢完全锁(读和写)。我知道一个文件,我可以使用File.Open(FullPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
来阻止其他人访问它。驱动器有类似的东西吗?
如果可以,那么作为奖励,有没有办法可以将任何流量从F:\重定向到G:\? (G:\正在近乎实时地从F:\复制,因此任何读取/打开都应该可以在文件路径中简单地用G替换F,但我不确定这是否可以通过编程方式实现)。
答案 0 :(得分:1)
OP:
那么,有没有办法使用C#我可以"锁定" F:\驱动器,以便没有人可以读/写它?
是的,虽然不是c#所以你需要p-invoke但是要使用IOCTL FSCTL_LOCK_VOLUME
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to a volume
(DWORD) FSCTL_LOCK_VOLUME, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
MSDN:
如果卷未使用,则锁定该卷。只能通过锁定卷的文件对象(* hDevice)的句柄访问锁定的卷。有关更多信息,请参阅备注部分
...此操作对于独占访问 到 一段时间的应用程序非常有用 - 例如,磁盘实用程序和备份程序
OP:
...有没有办法可以将任何流量从F:\重定向到G:\?
我不知道