Я написал код, который может записывать и читать данные с физического диска. Я открываю физический диск с помощью pInvoke CreateFile и использую FileStream для чтения и записи данных.
Когда физический диск подключен к сети, все работает отлично.
Если физический диск отключен, и я пытаюсь выполнить запись на диск, я получаю сообщение об ошибке System.IO.IOException: «Носитель защищен от записи».
Как я могу определить, находится ли диск в автономном режиме, не пытаясь выполнить запись на диск.
Вот код, который создает FileStream и выполняет запись на диск
private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
private const uint OPEN_EXISTING = 3;
private const uint FILE_FLAG_NO_BUFFERING = 0x20000000;
private const uint FILE_FLAG_WRITE_THROUGH = 0x80000000;
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess,
uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
uint dwFlagsAndAttributes, IntPtr hTemplateFile);
public void OpenFile()
{
m_handleValue = CreateFile(DevicePath, GENERIC_WRITE | GENERIC_READ,
0x3, IntPtr.Zero, OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH
, IntPtr.Zero);
m_fileStream = new FileStream(m_handleValue, FileAccess.ReadWrite, 512);
}
public void WriteData(int offset, byte[] data)
{
m_fileStream.Seek(offset, SeekOrigin.Begin);
m_fileStream.Write(data, 0, data.Length);
}
CreateFile
? Ваше объявление не добавляет никаких функций, которых еще нет ни в одном из конструкторовFileStream
. - person Dai   schedule 26.07.2020CreateFile
Win32. Тем не менее, может быть уместным фактически разрешить создание исключения, но только если отключенное / недоступное устройство действительно является исключительным обстоятельством. - person Dai   schedule 26.07.2020