请告诉我这个功能是否正确(我相信它是正确的),有效的,干净的。
要检查的函数:
::CURLcode CURL_DownloadFile( __in ::LPCSTR URL, __in ::LPCSTR Destination )
{
::CURL* Curl;
::CURLcode Return_CurlCode;
std::FILE* File;
if( ( Curl = ::curl_easy_init( ) ) )
{
File = std::fopen( Destination, "wb" );
::curl_easy_setopt( Curl, CURLOPT_URL, URL );
::curl_easy_setopt( Curl, CURLOPT_WRITEFUNCTION, WriteData );
::curl_easy_setopt( Curl, CURLOPT_WRITEDATA, File );
Return_CurlCode = ::curl_easy_perform( Curl );
std::fclose( File );
} else { ( Return_CurlCode = CURLE_FAILED_INIT ); }
return( Return_CurlCode );
};使用示例:
#include "Global.h"
::CURLcode CURL_DownloadFile( __in ::LPCSTR URL, __in ::LPCSTR Destination );
int main( void )
{
if( CURL_DownloadFile( "http://stackoverflow.com/", "c:\\users\\xorr\\desktop\\stackoverflow.txt" ) != CURLE_OK )
std::printf( "An error has occured...\n" );
std::cin.get( );
return( EXIT_SUCCESS );
// Xorr@Hotmail.com
};
size_t WriteData( void *ptr, size_t size, size_t nmemb, std::FILE *stream ) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
::CURLcode CURL_DownloadFile( __in ::LPCSTR URL, __in ::LPCSTR Destination )
{
::CURL* Curl;
::CURLcode Return_CurlCode;
std::FILE* File;
if( ( Curl = ::curl_easy_init( ) ) )
{
File = std::fopen( Destination, "wb" );
::curl_easy_setopt( Curl, CURLOPT_URL, URL );
::curl_easy_setopt( Curl, CURLOPT_WRITEFUNCTION, WriteData );
::curl_easy_setopt( Curl, CURLOPT_WRITEDATA, File );
Return_CurlCode = ::curl_easy_perform( Curl );
std::fclose( File );
} else { ( Return_CurlCode = CURLE_FAILED_INIT ); }
return( Return_CurlCode );
};发布于 2013-01-25 10:48:44
您的写函数不正确:
size_t WriteData( void *ptr, size_t size, size_t nmemb, std::FILE *stream ) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}如果不返回size*nmemb,CURL将中止传输。因此,您需要注意确保您确实编写了所提供的所有数据。
这也是默认CURLOPT_WRITEFUNCTION的操作,因此不需要编写您自己的版本。
不检查文件指针是否为空
File = std::fopen( Destination, "wb" );这是一个C函数(即使您从C++中使用了它)。这意味着您必须检查返回值,以确保该派别成功。
不要人为地停止应用程序。您可能忘记删除这个,然后它将使程序看起来像它是坏的。
std::cin.get( );如果您从命令行运行,则不需要它。如果在IDE中运行,请设置IDE,使其在应用程序完成时不会关闭输出窗口。
如果你的程序总是成功。然后,我不希望从main()返回一个退出值。这一特殊情况下的编译器将为您安装一个return 0;以表示成功。这是一个很好的指示,说明您已经设计了您的应用程序,使其永远不会失败。
return( EXIT_SUCCESS );只有在有可能出现故障的情况下,我才返回一个值,并且我希望能够指示可能的失败状态。
https://codereview.stackexchange.com/questions/20886
复制相似问题