【问题标题】:Counting MD5 of part of a file with Poco Library使用 Poco 库计算文件部分的 MD5
【发布时间】:2013-11-04 10:01:17
【问题描述】:

在为文件的一部分获取正确的 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);

【问题讨论】:

    标签: c++ poco-libraries


    【解决方案1】:

    这似乎有效。

    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);
                                            
    std::istringstream iss(std::string(data, length));
    
    delete []data;
    

    【讨论】:

    • 不,这根本行不通,因为您delete []data 在使用它之前。您现在有未定义的行为。您是否在提示您编写问题的实际代码中执行此操作?
    • 是的,一个实际案例。感谢您注意到删除的内容,将其移至适当的位置。尽管如此,它在不移动它的情况下工作(奇怪)。
    • 这是因为未定义的行为是未定义的。 :) 你无法预测会发生什么。有时它会起作用,有时它不会。
    猜你喜欢
    • 2011-08-27
    • 2019-07-30
    • 1970-01-01
    • 2016-12-30
    • 2016-11-20
    • 2010-10-20
    • 2016-12-30
    • 2013-09-08
    • 2012-05-18
    相关资源
    最近更新 更多