2013-10-16 3 views
-6

다소 이상한 문제가 있습니다. 전임자의 설계로 인해 27MB의 파일이 있으며 100,000 번째 바이트와 같이 특정 바이트를 찾아야합니다. 그런 다음 100,000 번째와 150,000 번째 바이트 사이의 모든 항목을 삭제해야합니다.파일에서 n 번째 바이트를 찾는 방법

파일은 약 10,000 자 후에 [END]으로 끝나는 헤더 파일과 실제 데이터 (모두 바이트 형식)로 나뉩니다. 2 천 7 백만 바이트는 약 15000 개 라인으로 분리되어 있습니다.

도움을 주시면 감사하겠습니다.

+0

2.7mb는 2,700 만입니다. – Spaceghost

+2

묵시적인 "plz send code codez"는 제외하고 여기서 실제 질문을 볼 수 있을지 확신하지 못합니다. –

+0

"그렇게해라"는 질문이 아닙니다. – tadman

답변

0

공간 사용에 대한 엄격한 제한이없는 한 한 가지 해결책은 파일을 필요없는 다른 건너 뛰기 바이트로 복사하는 것입니다. 바이너리 모드에서 파일을 열 필요가있을 수있는 n 번째 바이트를 계산하는 방법에 따라 다릅니다. 소스 파일의 이름을 임시로 변경하여 새 파일을 원래 이름으로 열고 실제 복사를 수행하고 소스를 삭제할 수 있습니다. 또는 임시 파일에 내용을 복사 한 다음 원본을 삭제하고 임시 이름을 원래 이름으로 바꿀 수 있습니다. 디스크 공간에 제한이있는 경우 남은 파일 (예제에서 150,000 번째에서 끝까지)을 저장할 수 있으므로 원본 파일을 100,000 번째 파일로 잘린 다음 나머지 파일을 다시 복사 할 수 있습니다.

0

seekg를 사용하여 원치 않는 영역을 건너 뛰려면 파일 1을 복사하십시오.

//open the files: 
ifstream fin("filename.ext",ios::in|ios::binary); 
ofstream fout("filename.ext",ios::out|ios::binary); 

size_t position = ?? ;// position in file 
size_t size = ??; //size you want to read 

char buffer[BUFFSIZE]; 
//go to position: 
fin.seekg(position); 

//read from position 
while(size > 0){ 
    fin.read(buffer, MIN(size, BUFFSIZE)); 
    size_t count; 
    fout.write(buffer, count); 
    size -= count; 
} 
관련 문제