Libcurl-下载并保存实名文件 我开发C++应用程序。它下载文件。典型的url看起来像 所以第一个问题-我需要得到真实的文件名。 我喜欢这样做: curl_easy_setopt(pCurl, CURLOPT_HEADERFUNCTION, readHeader);

Libcurl-下载并保存实名文件 我开发C++应用程序。它下载文件。典型的url看起来像 所以第一个问题-我需要得到真实的文件名。 我喜欢这样做: curl_easy_setopt(pCurl, CURLOPT_HEADERFUNCTION, readHeader);,c++,libcurl,C++,Libcurl,还有回电话 size_t NetworkHelper::readHeader(void *ptr, size_t size, size_t nmemb, void *data) { std::string header; header.assign((char*)ptr, nmemb); size_t delimPos = header.find_first_of(':'); std::string headerName; std::str

还有回电话

size_t NetworkHelper::readHeader(void *ptr, size_t size, size_t nmemb, void *data)
{
        std::string header;
        header.assign((char*)ptr, nmemb);
    size_t delimPos = header.find_first_of(':');
    std::string headerName;
    std::string headerContent;
    if (delimPos != std::string::npos)
    {
        headerName = header.substr(0, delimPos);
        headerContent = header.substr(delimPos + 1, header.length());
        m_headers[headerName] = headerContent;
    }
    return size*nmemb;
}
在这里,我将标题及其值插入到映射中 每个http头都会多次调用此回调。我真正需要的标题是“Location:url/realfilename.yyy”

和编写回调:

size_t NetworkHelper::writeFileCallback(void* ptr, size_t size, size_t nmemb, void* data)
{
    size_t count;
    Fetchdata* fetchdata;
    fetchdata = (Fetchdata*)data;
    std::string fileName = NetworkHelper::m_headers["Location"].c_str();
    fileName = "C:/" + fileName.substr(fileName.find_last_of('/') + 1, fileName.length());
    fetchdata->stream = fopen( fileName.c_str(),"w+b");
    if (fetchdata->stream!=NULL)
    {
        count = fwrite(ptr, size, nmemb, fetchdata->stream);
        if (count > 0) 
        {
            fetchdata->size += (count * size);
        }
    }
    return nmemb*size;
}
这里fopen失败(返回NULL)。我如何处理文件以及如何以更好的方式处理文件是错误的吗?
谢谢。

首先检查文件名实际包含的内容。 在windows上使用error()或GetLastError检查问题所在。 我可能错了,但根据您的代码,文件名实际上包含如下内容: C:/
upd:很抱歉,文件名确实是错的,首先检查文件名实际包含的内容。 在windows上使用error()或GetLastError检查问题所在。 我可能错了,但根据您的代码,文件名实际上包含如下内容: C:/ upd:对不起,文件名真的错了