Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 軟件綜合 >> URLDownloadToFile URLDownloadToCacheFile下載文件api函數區別

URLDownloadToFile URLDownloadToCacheFile下載文件api函數區別

日期:2017/2/8 9:59:38      編輯:軟件綜合

編寫軟件的時候經常要遇到的情況就是需要從互聯網上下載文件(比如升級程序或者獲取程序信息等),一般來說我們使用的都是URLDownloadToFile函數,函數原型如下:


HRESULT URLDownloadToFile(
    LPUNKNOWN pCaller,
    LPCTSTR szURL,
    LPCTSTR szFileName,
    DWORD dwReserved,
    LPBINDSTATUSCALLBACK lpfnCB
);

其中的pCaller、dwReserved和lpfnCB這三個參數都不重要,最主要的是szURL(要下載的文件url地址)和szFileName(要保存的文件路徑和文件名)這兩個參數,這個函數很方便,在哪種語言中調用都比較簡單,但目前這個函數已經被多款防病毒軟件盯上了,我之前寫的一個程序A中只要調用該函數馬上就會被瑞星誤報,原因主要是太多的下載者程序和木馬軟件使用該函數下載病毒文件,雖然我的這個程序沒什麼危害但總被這樣誤報心裡也確實不舒服,查了下msdn,找到了一個類似的函數:URLDownloadToCacheFile,可以實現同樣的功能,但由於該函數在IE本身中就有很多調用,所以肯定不會被誤殺,這個函數的原型如下:


HRESULT URLDownloadToCacheFile(
    LPUNKNOWN lpUnkcaller,
    LPCSTR szURL,
    LPTSTR szFileName,
    DWORD dwBufLength,
    DWORD dwReserved,
    IBindStatusCallback *pBSC
);

其實跟URLDownloadToFile是很相似的,其中的lpUnkcaller、dwReserved和*pBSC參數可以不指定,一定要有的參數是szURL(要下載的文件url地址)、szFileName(保存文件名的指針)、dwBufLength(文件名緩沖區長度),該函數會默認下載文件到ie緩存目錄裡(看函數名就能想到),szFileName中保存的是文件路徑,調用的時候可以直接獲取szFileName打開文件。

用URLDownloadToCacheFile替換URLDownloadToFile函數再編譯我之前所說的程序A,使用VIRUSTOTAL查毒,誤報現象得以解除。

Copyright © Windows教程網 All Rights Reserved