给我的富文本编辑器添加从浏览器拷贝内容功能时发现的问题,有时候URLDownloadToCacheFile下载的临时文件和IE下载的文件不一样,特别是那些需要服务器解释的IMG引用路径,如:http://os.blog.163.com/common/ava.s?host=simplesource&b=1&r=4117285956 路径和内容都有区别,费解,不知道有没有替代函数。QQ的编辑框和word拷贝这些文件是正常的,不知道他们怎么实现的。
20101129
找到了一个办法,在URLDownloadToCacheFile之前先找一下,虽然感觉效率有点低,但是没找到更好的办法前只能这样了。
代码如下
static CString URLToCache(const char * szUrl)
{
LPINTERNET_CACHE_ENTRY_INFO pEntry = NULL;
HANDLE hdir = NULL;
HANDLE hTemp = NULL;
unsigned long size = 4096;
int i = 0;
BOOL isEnd = FALSE;
BOOL ret = TRUE;
CString sPath = "";
do
{
pEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[size];
pEntry->dwStructSize = size;
if(hdir == NULL)
{
hdir = FindFirstUrlCacheEntry(NULL, pEntry, &size);
if(hdir)
{
if(strcmp(szUrl, strlwr(pEntry->lpszSourceUrlName)) == 0)
{
sPath = pEntry->lpszLocalFileName;
isEnd = TRUE;
}
}
}
else
{
ret = FindNextUrlCacheEntry(hdir, pEntry, &size);
if(ret)
{
if(strcmp(szUrl, strlwr(pEntry->lpszSourceUrlName)) == 0)
{
sPath = pEntry->lpszLocalFileName;
isEnd = TRUE;
}
}
}
if(ret == TRUE)
{
ret = FindNextUrlCacheEntry(hdir, pEntry, &size);
if (ret)
{
if(strcmp(szUrl, strlwr(pEntry->lpszSourceUrlName)) == 0)
{
sPath = pEntry->lpszLocalFileName;
isEnd = TRUE;
}
}
while (ret)
{
ret = FindNextUrlCacheEntry(hdir, pEntry, &size);
if (ret)
{
if(strcmp(szUrl, strlwr(pEntry->lpszSourceUrlName)) == 0)
{
sPath = pEntry->lpszLocalFileName;
isEnd = TRUE;
}
}
}
}
else
{
isEnd = TRUE;
}
delete[] pEntry;
}
while (isEnd == FALSE);
if(sPath == "")
{
char tmp[1024];
HRESULT hr = URLDownloadToCacheFile(NULL, szUrl, tmp, 1023, 0, NULL);
if(SUCCEEDED(hr))
{
sPath = tmp;
}
}
return sPath;
}
PS:尝试过GetUrlCacheEntryInfoEx,其路径结果跟URLDownloadToCacheFile是一样的,怀疑URLDownloadToCacheFile里面封装的就是GetUrlCacheEntryInfoEx