Всем привет. Задача такая: Есть обычный фаил .txt ,в нем есть список строк пример: Код (Text): строка1 строка2 строка3 строка4 Вопрос как проще а главное быстрее получить эти строки по порядку? Подскажите алгоритм.Начинаю с функции CreateFile- открываю фаил что делать дальше?
Понятно. А если фаил большой и не известно какого размера нужен будет буфер для него. Правильно ли будет сделать так-как я сделал в коде ниже? Код (Text): invoke CreateFileA,pFile,GENERIC_READ+GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 MOV [hFile],EAX invoke GetFileSize,[hFile],NULL MOV [filesize],EAX invoke VirtualAlloc,NULL,[filesize],MEM_COMMIT,PAGE_READWRITE MOV [ptrvbase],EAX invoke ReadFile,[hFile],[ptrvbase],[filesize],lpBytesRead, 0
Если файл будет БОЛЬШОЙ, то выделение памяти зафейлится. Выберите себе буфер определенного размера (1mb к примеру) и по кускам читайте файл.
char WordBuffer[500]; int wordOffset = 0; bool GetWord(HANDLE hFile) { int Entering = 0; wordOffset = 0; DWORD ReadRes; while(true) { ReadFile(hFile,&WordBuffer[wordOffset],1,&ReadRes,0); if(ReadRes == 0) { WordBuffer[wordOffset] = 0; if(wordOffset == 0) return false; return true; } if(WordBuffer[wordOffset] == 0xD || WordBuffer[wordOffset] == 0xA) { Entering++; if(Entering == 2) { WordBuffer[wordOffset] = 0; return true; } wordOffset--; } wordOffset++; } WordBuffer[wordOffset] = 0; if(wordOffset == 0) return false; return true; } мой старый код на с++, принимает хендл файла с файл поинтером на 0й байт, потом вызывается в цикле. есть секьюрити недостаток при обработки новой строки, но для нормальных txt файлов должен работать нормально.(я когда-то на нём брут форс делал)... и недостаток в низкой скорости чтения, надо приляпать какой-то буффераризатор