1
+ #include " ForgeHttp.h"
2
+
3
+ BOOLEAN CheckFileExist (PCHAR lpszPath)
4
+ {
5
+ if (GetFileAttributesA (lpszPath) == 0xFFFFFFFF && GetLastError () == ERROR_FILE_NOT_FOUND )
6
+ {
7
+ return FALSE ;
8
+ }
9
+ else
10
+ {
11
+ return TRUE ;
12
+ }
13
+ }
14
+ BOOLEAN DownloadFileFromUrl (PCHAR pUrl,PCHAR pSaveFileName)
15
+ {
16
+ BOOLEAN bRet;
17
+ HINTERNET hInternet;
18
+ HINTERNET hOpenUrl;
19
+ ULONG ulStatusCode;
20
+ ULONG ulStatusSize;
21
+ ULONG ulSize;
22
+ ULONG ulLengthSize;
23
+ HANDLE hLocalFile;
24
+ BOOLEAN bIsWrite;
25
+ ULONG ulRetReadBytesSize,ulRetWriteBytesSize;
26
+ CHAR Buffer[0x1000 ];
27
+
28
+
29
+ bRet = FALSE ;
30
+ hInternet = NULL ;
31
+ hOpenUrl = NULL ;
32
+ bIsWrite = TRUE ;
33
+ ulRetReadBytesSize = 0 ;
34
+ ulRetWriteBytesSize = 0 ;
35
+
36
+ do
37
+ {
38
+ hInternet = InternetOpenA (NULL ,INTERNET_OPEN_TYPE_DIRECT,NULL ,NULL ,0 );
39
+ if (NULL == hInternet)
40
+ {
41
+ break ;
42
+ }
43
+ hOpenUrl = InternetOpenUrlA (hInternet,pUrl,NULL ,0 ,INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_PRAGMA_NOCACHE,0 );
44
+ if (NULL == hOpenUrl)
45
+ {
46
+ InternetCloseHandle (hInternet);
47
+ break ;
48
+ }
49
+ ulStatusSize = sizeof (ulStatusCode);
50
+ HttpQueryInfoA (hOpenUrl,HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,&ulStatusCode,&ulStatusSize,NULL );
51
+ if (200 != ulStatusCode)
52
+ {
53
+ InternetCloseHandle (hOpenUrl);
54
+ InternetCloseHandle (hInternet);
55
+ break ;
56
+ }
57
+ ulLengthSize = sizeof (ulSize);
58
+ HttpQueryInfoA (hOpenUrl,HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,&ulSize,&ulLengthSize,NULL );
59
+ if (ulSize < 0 )
60
+ {
61
+ InternetCloseHandle (hOpenUrl);
62
+ InternetCloseHandle (hInternet);
63
+ break ;
64
+ }
65
+ hLocalFile = CreateFileA (pSaveFileName,GENERIC_WRITE | GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0 ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 );
66
+ if (hLocalFile == INVALID_HANDLE_VALUE)
67
+ {
68
+ InternetCloseHandle (hOpenUrl);
69
+ InternetCloseHandle (hInternet);
70
+ break ;
71
+ }
72
+ while (TRUE )
73
+ {
74
+ InternetReadFile (hOpenUrl,Buffer,sizeof (Buffer),&ulRetReadBytesSize);
75
+ if (ulRetReadBytesSize == 0 )
76
+ {
77
+ break ;
78
+ }
79
+ bIsWrite = WriteFile (hLocalFile,Buffer,ulRetReadBytesSize,&ulRetWriteBytesSize,NULL );
80
+ if (bIsWrite == 0 )
81
+ {
82
+ break ;
83
+ }
84
+ }
85
+ bRet = TRUE ;
86
+ } while (0 );
87
+ if (hLocalFile)
88
+ {
89
+ CloseHandle (hLocalFile);
90
+ }
91
+ if (hOpenUrl)
92
+ {
93
+ InternetCloseHandle (hOpenUrl);
94
+ }
95
+ if (hInternet)
96
+ {
97
+ InternetCloseHandle (hInternet);
98
+ }
99
+ return bRet;
100
+ }
0 commit comments