📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::FileDownLoad(AnsiString URL, AnsiString LocalFile)
{
int i;
AnsiString HostName,FileName;
//分解URL
i=URL.Pos("http://");
if(i>0) URL.Delete(1,7);
i=URL.Pos("/");
HostName=URL.SubString(1,i-1);
FileName=URL.SubString(i,URL.Length());
//建立会话
HINTERNET hSession=InternetOpen("Download_Demo",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,NULL,0);
//建立连接
HINTERNET hConnect=InternetConnect(hSession,
HostName.c_str(),
INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,
INTERNET_SERVICE_HTTP,0,0);
//初始化下载请求
const char *Type="*/*";
HINTERNET hRequest=HttpOpenRequest(hConnect,
"GET",
FileName.c_str(),
"HTTP/1.1",
NULL,
&Type,
INTERNET_FLAG_RESYNCHRONIZE,0);
//发出下载请求
HttpSendRequest(hRequest,
NULL,
0,
NULL,
0);
//获取要下载的文件的大小
DWORD BufferLen;
DWORD Index=0;
char Buffer[1025];
HttpQueryInfo(hRequest,
HTTP_QUERY_CONTENT_LENGTH,
Buffer,
&BufferLen,
&Index);
DWORD FileSize=StrToInt(Buffer);
//建立文件
int hFile;
DWORD Count=0;//总共下载的字节数
if(FileExists(LocalFile))
{
hFile=FileOpen(LocalFile,fmOpenWrite);
Count=GetFileSize(HANDLE(hFile),NULL);
if(Count>0)
{
//调整本地文件指针到末尾
FileSeek(hFile,0,2);
//调整Web上的文件指针
InternetSetFilePointer(hRequest,
Count,
NULL,
FILE_BEGIN,
NULL);
}
}
else
{
hFile=FileCreate(LocalFile);
}
//下载文件
DWORD Request=1024;//请求下载的字节数目
DWORD Read;//本次下载的字节数目
bool Result;
bool ReadResult;
do
{
Application->ProcessMessages();
ReadResult=InternetReadFile(hRequest,
(LPVOID)Buffer,
Request,
&Read);
if(!ReadResult) break;
if(Read==0) break;
//保存
Buffer[Read]='/0';
FileWrite(hFile,Buffer,Read);
Count=Count+Read;
ProgressBar1->Position=Count*100/FileSize;//调整进度条位置
}
while(!StopFlag);//检查是否应该停止下载
FileClose(hFile);
//释放资源
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
//提示
if(FileSize==Count)
{
Application->MessageBoxA("下载完毕","",MB_OK);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
StopFlag=false;
ProgressBar1->Position=0;
FileDownLoad(Edit1->Text, Edit2->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
StopFlag=true;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -