| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Реально ли? |
| Автор: WildSpy 10.7.2007, 17:21 |
| Такой вопрос, реально ли на VB получить низкоуровневый доступ к устройству, например винту? И вообще, как это реализуется на любых языках? Объясните плз... |
| Автор: cardinal 10.7.2007, 22:04 |
Через драйверы. |
| Автор: Akina 10.7.2007, 22:24 |
| Что разумеется под словами "низкоуровневый доступ"? Хочешь напрямую с портами ввода-вывода работать? пожалуйста, есть драйвер DirectIO... вот только ОС, пожалуй, обидится... можно напрямую с драйвером устройства поработать - через IOCTL или DirectIOControl, например... А вот самостоятельный драйвер устройства на VB, пожалуй, нереализуем. То есть формально это возможно, но получится сплошь инлайновый ассемблер... |
| Автор: WildSpy 11.7.2007, 08:46 |
| Просто мне нужно считать файл не стандартной функцией, а максимально быстро. И я так думаю, что для этого нужно получить низкоуровневый доступ к винту, как это делает например антивирус. А потом ещё разобраться как считать файл. Подскажите что-нибудь. |
| Автор: W4FhLF 11.7.2007, 08:56 | ||||
Это невозможно ни в каком виде при использовании компилятора VB.
Самое быстрое, что тут можно придумать, помимо разбирая файловой системы, т.е. работы в RAW режиме, это самостоятельная посылка пакета в disk.sys, но в ВБ это нереализуемо. |
| Автор: WildSpy 11.7.2007, 09:44 | ||
| Да нет, файл определяется пользователем. Тут не суть важно, размер неизвестен. Но в среднем не больше 10 мег. Файл бинарный, нужно как можно быстрее загрузить его в память. и еще один вопрос, есть код:
это код переводит файл в hex, типа как это делают WinHEX и т.д. Вопрос, как этот код ускорить, а то он работает ужасно медленно. |
| Автор: W4FhLF 11.7.2007, 10:39 |
Покажи, что у тебя на входе и что должно быть на выходе |
| Автор: WildSpy 11.7.2007, 11:17 | ||||
так понятнее? |
| Автор: mihanik 11.7.2007, 12:02 |
Естественно! Ты же работаешь с текстовыми переменными для того, чтобы числа перебрасывать из одной системы в другую... Сформулируй поточнее саму задачу, а не то, как ты её решал!!! |
| Автор: WildSpy 11.7.2007, 12:11 | ||
Открыть файл и перевести его в hex, типа как это реализовано в hex-Редакторах типа WinHEX |
| Автор: W4FhLF 11.7.2007, 13:36 | ||
В Text1 поставь шрифт Courier New |
| Автор: Akina 11.7.2007, 13:55 |
| Читать лучше через FileSystemObject.ReadAll - 10 мег всасывается мгновенно. Это не лимитирует. Лимитирует именно конвертация - медленные строковые функции... и совершенно правильное решение ускорить процесс за счет работы с фиксированным буфером. |
| Автор: WildSpy 11.7.2007, 14:16 |
| Огромное спасибо, работает. =) |
| Автор: WildSpy 11.7.2007, 14:32 |
| Ещё один маленький вопрос, код написан достаточно сложно, т.е. как можно более компактно и не совсем понятен для меня. Так вот, такой ламерский вопрос, как избавится от пробелов на выходе? т.е. чтобы между цифрами и буквами не было пробелов? убирать их replace'ом долго, а откуда они берутся не могу найти. |
| Автор: Akina 11.7.2007, 14:40 |
Так изначально же буфер заполняется пробелами... |
| Автор: WildSpy 11.7.2007, 14:57 | ||
а, понятно и как от них избавится, чтобы на выходе получился сплошной текст, и чтобы скорость приличная была....? |
| Автор: Akina 11.7.2007, 17:00 | ||
Откорректировать расчет размера буфера и смещений, чтобы данные ложились "впритирку"... |
| Автор: WildSpy 11.7.2007, 17:17 |
| Блин, непонимаю как это... можно пример? |
| Автор: Akina 11.7.2007, 17:30 | ||
|
| Автор: WildSpy 11.7.2007, 18:07 |
| Спасибо, но почему то то код с "пробелами" работал быстрее, чем этот, "без пробелов"...почему так? причем разница в скорости серьезно ощутима т.е. новый код, по скорости примерно так же, как старый с применением Replace'а... |
| Автор: W4FhLF 11.7.2007, 19:39 | ||
У меня новый быстрее в среднем на 11%, оно и следовало предполагать. Чему там быть медленнее? |
| Автор: WildSpy 11.7.2007, 20:17 |
| Незнаю, у меня старый код, где без убранных пробелов намного быстрее остального. |
| Автор: bom 12.7.2007, 00:04 |
| Первый код "загружает" в Textbox кусок файла размером 21 КВ, второй - 32 КВ, отсюда и разница в скорости, так как Texbox довольно тормозной контрол. |
| Автор: WildSpy 12.7.2007, 07:37 |
| Ага, я уже разобрался, всем спасибо. Если можно, то последний вопрос, как загрузить файл с определенного байта (offset'а) ? |
| Автор: Akina 12.7.2007, 12:53 |
| seek |
| Автор: __Sergey__ 12.7.2007, 15:55 |
| надо использовать ф-ции, работающие с файловым отображением. Добавлено через 2 минуты и 5 секунд CreateFileMapping, MapViewOfFile ... |
| Автор: WildSpy 12.7.2007, 16:05 | ||
Спасибо, а не подскажешь, где про это почитать? |
| Автор: Akina 12.7.2007, 17:06 | ||
|
| Автор: W4FhLF 12.7.2007, 18:24 | ||
|