2012-04-05 5 views
0

win32 (아주 오래된 컴퓨터에서 돌아 가기로되어 있음)에서 old-school mmorpg를 프로그래밍하고 있으며 ASCII 또는 유니 코드 (드물게)가 될 수있는 파일을 읽고 싶습니다. 그 안에 줄 수. 이러한 컴퓨터의 메모리가 매우 부족하여 한 번에 4KB 이상을 RAM에 보관할 수 없습니다.win32에서 파일을 읽는 중

어떤 아이디어가 있습니까? 감사합니다.

+2

되었습니다에만 * 하나 개의 라인을위한 충분한 저장 공간을 가질 필요가 다음 * 파일에 있습니다. 라인 수를 계산하면됩니다. 단순히 fgets() 함수를 사용하십시오. 그것이 NULL을 반환 할 때까지 계속 호출하십시오. 마지막에'\ n'에 대해 반환 된 문자열을 확인하고, 줄 카운터를 볼 때 줄을 증가시킵니다. –

+0

클라이언트 또는 서버입니까? 확실히 대규모 리소스없이 "대규모 멀티 플레이"게임을 만들 수는 없습니다. – geoffspear

답변

2

한 번에 작은 덩어리로 파일을 읽습니다. 메모리 예산의 1/10 크기라고 말하십시오. 각 덩어리에서 라인 끝을 센다.

당신이 직면하는 유일한 진짜 문제는 하나의 청크의 끝에서 다음 청크의 시작 부분에 이르는 cr + lf 쌍을 처리해야한다는 것입니다.

제발은 분명히 4KB가 아니라 4MB를 의미합니까?

+0

파일을 통해 피크를 확인하는 것만으로는 리턴 마차와 줄 바꿈 (라인 끝 규칙에 따라 다름)을 제외한 모든 것을 무시할 수도 있습니다. 이런 식으로하는 것이 실제로는 매우 빠르며 발자국은 거의 무시할 수 있습니다. –

+0

@Mike 그게 바로 내가 제안하는 것입니다. –

+0

그는 메모리에 약 4KB 밖에 저장할 수 없다고 말할 때 한 번에 128KB를 읽는 데 문제가 없습니까? 그냥 궁금해. –

0

그냥 ...

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

또는 진짜로을 조금 다른 무언가를 제안하는 단지 내 생각은 ... 잠시

find /C /V "" foo.txt