Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Да, Про маппинг совсем забыл, 09.12.04 16:55 Число просмотров: 2778
Автор: ih8u <i hate you> Статус: Member
|
Да, Про маппинг совсем забыл,
это я всё сделал.
Вот тут придумал имхо не плохой способ, заключающийся вот в чём:
Открываем файл - CreateFile
маппим его - hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
получаем размер - filesize = GetFileSize(hFile, NULL);
адресс - LPVOID lpBase = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
Далее
while(1)
{
LPVOID lpTemp = memchr(lpBase, 'A', filesize);
if(lpTemp)
{
// символ найден
lpBase = lpTemp;
for(int i = 1; i < 30; i++)
{
// пробуем откатываца назад, ограничение в 30 байт - больше не имеет смысла
memcpy(&buf[0], (LPTSTR)lpBase - i, 1); // Копируеца один символ и проверяеца
if(buf[0] == ''|buf[0] == ''|и т.д.)
break;
}
// Крутимся вперёд, максимум на 50 символов, больше не имеет смысла
for(int k = 0; k < 50; k++)
{
memcpy(&buf[k], (LPTSTR)lpBase - j + k + 1, 1); // считываем по символу и проверяем конец
if(buf[0] == ''|buf[0] == ""|buf[0] == '' и т.д.)
{
buf[k] = 0; // считали
break;
}
}
// тута надо пересчитать адреса и вычислить новый filesize что бы memchr начал искать с новой позиции, но у меня нифига не получаеца, компилятор пишет ощибку 'void *' : unknown size
}
else
//символ не найден, прерываем цикл
break;
}
|
|
|