Добрый день! У меня возникла такая проблема: допустим на жестком диске хранится файл под названием '123.exe'. Мне необходимо считать по битам весь этот файл. Каким образом мне это сделать?
читай по байтам, после каждого в цикле unsigned char bt; while(!feof(fh) { fread(&bt, 1, 1, fh); for (int i = 0; i < 8; ++i) { nex_bit = (bt >> 1) & 1; // .. тут обработка } }
LoL. Такое уже было на Delpimaster.Ru. Расхожая шутка - человеку казалось, что побитное чтение будет быстрее побайтного. Разочарование наступило позже - когда выяснилось что данные читаются секторами...
попытаюсь изложить свою задачу поконкретнее. 1. мне нужно определить начало расположения файла 123.exe на винчестере 2. считать этот файл от начала до конца (разницы нет по битам или по байтам) 3. стереть файл. т.е. все единицы заменить нулями 4. код программы желательно на ассемблере
ZZZ_ZZZ Вот это уже не так просто - код объемистый, раз должен поддерживать разные файловые системы. Врядли здесь кто-то поделиться бескорыстно такой полезной штукой. Впрочем есть и чуть более универсальный (независимый от файловой системы) и сложный способ, но требующий запуска драйвера в режиме ядра.
1) Почему не API? Ищешь файл, открываешь, стираешь. 2) Зачем считывать, если всё равно записывать одни нули хочешь? 3) Почему только единицы? Не проще ли просто-напросто затереть весь файл нулями? Эффект тот же, но во много раз быстрее будет. 4) Почему именно ассемблер?
Это типа wipefile? В нортон-утилитах была такая - файл как известно не стирается при удалении, поэтому утилита забивала его содержимое нулями. Непонятно только, зачем определять начало расположения? Открываешь файл, определяешь его длину, забиваешь нулями, а потом удаляешь. И все с помощью API.
ИМХО очень просто открываем файл на запись и пишем сначала до конца нули или единицы Н-ное количество раз. Непонял только для чего его считывать...