2013-07-31 2 views
0
char buf[100]; 
int bufSize = 100; 
int lastPosition = 0; 
while(!myfile.eof()){ 
myfile.read(buf,100); 
myfile.seekg(lastPosition); 
lastPosition = lastPosition + bufSize; 
} 

myfile에서 100 바이트를 읽고 커서 위치 100 바이트를 설정하려고합니다. 그런 다음 100 바이트에서 200 바이트까지 읽으 려합니다 ... 파일의 끝까지. 내가하는 일은 사실이야?마지막 커서 위치에서 파일을 읽는 방법?

+4

'seekg'를 사용할 필요조차 없으며, 파일에서 읽을 때 커서 위치가 앞으로 나아갑니다. '0'~ '99'(100 바이트)를 읽으면 커서는 이미 '100'위치에서 끝납니다. – Nbr44

+0

그럼 마지막 두 줄은 필요 없습니다. @ Nbr44 –

+1

정확합니다. 루프에'myfile.read (buf, 100)'만 쓰면,'100' 바이트 뒤의'100' 바이트를 제대로 읽을 수 있습니다 (물론,'435 '파일의 바이트 수, 마지막으로 읽은 크기는'35'입니다). – Nbr44

답변

0

myfileistream입니다. 읽을 때

  • read() 파일 포인터를 이동 할 때마다 당신이 예제로 제공 한 루프가 덮어
  • seek() 너무 필요가 없습니다 :이 경우

    ,이 작동 정확히 방법이 아니다

    : 당신은 이런 식으로 뭔가를 시도해야 하나

는 IT와 아무것도하지 않고 chunck 읽을 때마다 버퍼

또는 같은

char buf[100]; 
int bufSize = 100; 

while(!myfile.eof()){ 
    myfile.read(buf, bufSize); 
    // do something with your chunck here.   
}  
는 :

char * theWholeFile; 
int pos = 0; 
int chunckSize = 100; 

theWholeFile = new char[myfile.tellg()]; 

while(!myfile.eof()){ 
    myfile.read(theWholeFile + pos, chunckSize); 
    pos += chunckSize; 
}  

// theWholeFile contains the whole file at that point. Don't forget to delete it at some point! 

여기 마지막 chunck을 처리하지 않았다. 크기는 0에서 100 사이의 값이 될 수 있습니다. myfile.tellg() % chunckSize을 사용하여 실제 크기를 확인할 수 있습니다 (예 :).

자세한 내용은 related question on Stack Overflow을 참조하십시오.

0
int fileParts = 30; 
int bufSize = 100; 
char buf[fileParts}[bufSize]; 
int i = 0; 
while(!myfile.eof() && i<fileParts){ 
     myfile.read(buf[i],100); 
     ++i; 
} 

또는 2 차원 배열 대신 바이트 배열의 벡터를 사용하십시오.

관련 문제