2013-11-04 2 views
1

파일의 일부에 대해 올바른 md5 해시를 얻는 데 문제가 있으므로 내 코드는 다음과 같습니다. 전체 파일을 읽을 때마다 (찾기와 읽기없이) 괜찮습니다. 오류는 어디에 있습니까?Poco 라이브러리가있는 파일의 일부 MD5를 계산합니다.

long length = (offset_end - offset_start) + 1; 
char* buffer = new char[length]; 
std::ifstream ifs(downloadFile->url_hdd.c_str(), std::ios::binary); 
ifs.seekg(offset_start, std::ios::beg); 
ifs.read(buffer, length); 
ifs.close(); 
std::stringstream stringStream(buffer); 

Poco::MD5Engine md5; 
Poco::DigestOutputStream outstr(md5); 
outstr << stringStream.str(); 
outstr.flush(); //to pass everything to the digest engine 
const Poco::DigestEngine::Digest& digest = md5.digest(); 
std::string md5string = Poco::DigestEngine::digestToHex(digest); 

답변

0

이것은 작동하는 것 같습니다.

unsigned long long length = (downloadChunk->offset_end - downloadChunk->offset_start) + 1; 
char *data = new char[length]; 
fseek(file, downloadChunk->offset_start, SEEK_SET); 
fread(data, 1, length, file); 

fclose(file); 
delete []data; 

std::istringstream iss(std::string(data, length)); 
+0

아니요. 데이터를 사용하기 전에 [데이터 삭제] *로 전혀 작동하지 않습니다. 이제 * 정의되지 않은 동작 *이 있습니다. 질문을 작성하라는 실제 코드에서이 작업을 수행합니까? –

+0

예, 실제 사례입니다. 삭제 한 것을 알아 차리고 적절한 장소로 이동해 주셔서 감사합니다. 그럼에도 불구하고 그것을 움직이지 않고 일하고있었습니다 (이상하게). – Thunder

+0

정의되지 않은 동작이 잘 정의되어 있지 않기 때문입니다. :) 당신은 무슨 일이 일어날 지 예측할 수 없습니다. 때로는 효과가 있으며 때로는 그렇지 않을 수도 있습니다. –