2012-04-05 8 views
0

Я программирую старую школу mmorpg в win32 (она должна работать на очень старых машинах), и я хочу прочитать файл, который может быть либо ASCII, либо Unicode (редко), и считать количество строк в нем. из-за того, что у этих машин очень низкая память, я не могу хранить больше 4 КБ в ОЗУ.чтение файла в win32

любые идеи? thanks

+2

Вам нужно только иметь достаточно для хранения одной строки * * в файле. Даже не это, если вам нужно только подсчитывать строки. Просто используйте функцию fgets(). Продолжайте называть его, пока он не вернет NULL. Проверьте возвращенную строку для '\ n' в конце, увеличивайте счетчик строк, когда увидите ее. –

+0

Это клиент или сервер? Разумеется, вы не можете сделать игру «массово многопользовательской» без сравнительно массивных ресурсов. – geoffspear

ответ

2

Прочитайте файл в небольших кусках за один раз, скажем, 1/10 размера вашего бюджета памяти. Подсчитайте, что линия заканчивается в каждом фрагменте.

Единственная реальная проблема, с которой вы сталкиваетесь, заключается в том, что вам нужно иметь дело с парами cr + lf, которые охватывают от конца одного куска до начала следующего.

В стороне, конечно, вы имеете в виду 4 МБ, а не 4 КБ?

+0

может быть даже жизнеспособным, чтобы просто пройти через файл, игнорируя все, кроме возвратных вагонов и линейных каналов (в зависимости от соглашения о конце линии). На самом деле довольно быстро сделать это таким образом, а след будет почти ничтожным. –

+0

@Mike Это именно то, что я предлагаю. –

+0

не будет проблемой при чтении 128 КБ в то время, когда он сказал, что может хранить только около 4 КБ в памяти? Просто интересуюсь. –

0

Просто, чтобы предложить что-то немного другое ...

type foo.txt|find /C /V "~`[email protected]#$%^&*()_+" 

Или действительно только следующее ... Я думаю, что было какое-то время

find /C /V "" foo.txt 

 Смежные вопросы

  • Нет связанных вопросов^_^