Недавно, после пары отключений электроэнергии, мой компьютер сильно испортился (то и дело появляются BSODы, вся ОС ведет себя очень странно).
Теперь у меня есть программа, которая прекрасно работала до того, как мой компьютер сломался. Эта программа просто создает файл, используя CreateFile
и записывает в него с помощью WriteFile
. В этой программе также есть другие вещи, которые делают свое дело на основе этого файла. Я заметил, что вся программа тоже вела себя странно.
Мои результаты отладки:
- Я заметил, что после
CreateFile
файл создается там, где он должен быть (проверено с помощью проводника и командной строки). WriteFile
не писал в файл (опять же проверил с помощью проводника и командной строки).- После
WriteFile
всякий раз, когда я дважды щелкал файл в проводнике или делал что-либо с этим файлом, все вело себя так, как будто файл не существует. - Все API вернули соответствующие коды успеха. Нет ошибки абсолютно.
После того, как я остановил свою программу и вышел из IDE, я пошел в проводник и попытался удалить папку, содержащую файл, созданный выше, он показал мне это:
Однако файл был удален.
Примечание. Вышеописанное происходит не всегда.
Благодаря вышеописанной отладке я пришел к выводу, что благодаря тому, что вся моя ОС ведёт себя странно, моя программа тоже ведёт себя странно. В моей программе нет ошибок (поскольку до этих проклятых отключений электроэнергии все работало идеально).
Во всяком случае, у Microsoft есть это, чтобы сказать об этой ошибке. По сути, на моем жестком диске много поврежденных секторов.
Мой вопрос: есть ли способ программно проверить, в порядке ли жесткий диск на C? Это обнаружение не обязательно должно быть на 100% правильным. Однако я хочу, чтобы эта проверка была довольно быстрой (поскольку я делаю много операций записи и тому подобное).
Я хочу эту проверку, потому что на данный момент остальная часть моей программы думает, что файл есть и готов (поскольку ничего не возвращает ошибку), и возникают всевозможные странные действия. Как пользователь, который может не знать, что его / ее жесткий диск заблокирован, я хотел бы, чтобы моя программа предлагала запустить проверку диска.
FILE_FLAG_NO_BUFFERING
, чтобы записи сразу же сбрасывались на диск и не проходили через дисковый кеш... так что, возможно, вы можете увидеть какую-то ошибку в кодах возвратаWriteFile
. Однако это также снижает производительность. - person Ale   schedule 28.03.2013