用DeleteUrlCacheEntry碰到的问题

问题描述

程序的目的是删除www.apple.com网站的cookie,核心代码如下:DimsAsString=""DimnNeededAsInteger=0,nBufSizeAsIntegerDimbufAsIntPtrDimhEntryAsIntPtrDimCacheItemAsINTERNET_CACHE_ENTRY_INFOhEntry=FindFirstUrlCacheEntry(Nothing,IntPtr.Zero,nNeeded)nBufSize=nNeededbuf=Marshal.AllocHGlobal(nBufSize)hEntry=FindFirstUrlCacheEntry(Nothing,buf,nNeeded)IfMarshal.GetLastWin32Error()=ERROR_NO_MORE_ITEMSThenReturn""EndIfWhileMarshal.GetLastWin32Error()<>ERROR_NO_MORE_ITEMSDimreturnvalueAsBooleanTryCacheItem=DirectCast(Marshal.PtrToStructure(buf,GetType(INTERNET_CACHE_ENTRY_INFO)),INTERNET_CACHE_ENTRY_INFO)IfMarshal.PtrToStringAuto(CacheItem.lpszSourceUrlName).IndexOf("Cookie")>=0AndMarshal.PtrToStringAuto(CacheItem.lpszSourceUrlName).IndexOf("@apple.com")>=0Thenreturnvalue=DeleteUrlCacheEntry(CacheItem.lpszSourceUrlName)Ifreturnvalue=falsethenMsgBox(Marshal.GetLastWin32Error())EndIFEndIfreturnvalue=FindNextUrlCacheEntry(hEntry,buf,4096)CatchexAsSystem.ExceptionConsole.WriteLine(ex.Message+ex.StackTrace)EndTryEndWhileMarshal.FreeHGlobal(buf)Returns

目前问题出在”DeleteUrlCacheEntry(CacheItem.lpszSourceUrlName)"上,经过测试,该函数返回false我用getlastwin32error,发现错误信息是“找不到文件”我检查过了,CacheItem的各个参数都正常,调试时也确实是我要删除的文件,为什么会出现这样奇怪的错误呢?备注:1CacheItem.lpszSourceUrlName是一个intptr指针,不是字符串2FindNextUrlCacheEntry(hEntry,buf,4096)中用4096以防止因空间不足而引起的获取CacheEntry失败

解决方案

解决方案二:
BOOLDeleteUrlCacheEntry(LPCTSTRlpszUrlName);函数功能删除Cache中指定的源文件名,如果指定文件存在则删除参数说明lpszUrlName源文件的名字该名字不能包含换码符返回值如果成功返回真否则返回假
解决方案三:
代码整全点咱也好帮你测试呀。除Cookie外的能删除吗?看一下这个,以前收集的但没仔细研究过:http://vbnet.mvps.org/index.html?code/internet/deleteurlcache.htm
解决方案四:
把全部代码贴上给大家看看ImportsSystemImportsSystem.Runtime.InteropServicesPublicClassGetCache#Region"引入所需要的Dll"<StructLayout(LayoutKind.Sequential,CharSet:=CharSet.Auto)>_PrivateStructureINTERNET_CACHE_ENTRY_INFOPublicdwStructSizeAsIntegerPubliclpszSourceUrlNameAsIntPtrPubliclpszLocalFileNameAsIntPtrPublicCacheEntryTypeAsIntegerPublicdwUseCountAsIntegerPublicdwHitRateAsIntegerPublicdwSizeLowAsIntegerPublicdwSizeHighAsIntegerPublicLastModifiedTimeAsComTypes.FILETIMEPublicExpireTimeAsComTypes.FILETIMEPublicLastAccessTimeAsComTypes.FILETIMEPublicLastSyncTimeAsComTypes.FILETIMEPubliclpHeaderInfoAsIntPtrPublicdwHeaderInfoSizeAsIntegerPubliclpszFileExtensionAsIntPtrPublicdwExemptDeltaAsIntegerEndStructure<StructLayout(LayoutKind.Sequential,CharSet:=CharSet.Auto)>_PrivateStructureSYSTEMTIMEPublicwYearAsShortPublicwMonthAsShortPublicwDayOfWeekAsShortPublicwDayAsShortPublicwHourAsShortPublicwMinuteAsShortPublicwSecondAsShortPublicwMillisecondsAsShortEndStructure<DllImport("kernel32.dll",SetLastError:=True,CharSet:=CharSet.Auto)>_PrivateSharedFunctionFileTimeToSystemTime(ByVallpFileTimeAsIntPtr,ByVallpSystemTimeAsIntPtr)AsIntegerEndFunction<DllImport("wininet",SetLastError:=True,CharSet:=CharSet.Auto,EntryPoint:="FindFirstUrlCacheGroup",CallingConvention:=CallingConvention.StdCall)>_PrivateSharedFunctionFindFirstUrlCacheGroup(ByValdwFlagsAsInteger,ByValdwFilterAsInteger,ByVallpSearchConditionAsIntPtr,ByValdwSearchConditionAsInteger,ByReflpGroupIdAsLong,ByVallpReservedAsIntPtr)AsIntPtrEndFunction<DllImport("wininet",SetLastError:=True,CharSet:=CharSet.Auto,EntryPoint:="FindNextUrlCacheGroup",CallingConvention:=CallingConvention.StdCall)>_PrivateSharedFunctionFindNextUrlCacheGroup(ByValhFindAsIntPtr,ByReflpGroupIdAsLong,ByVallpReservedAsIntPtr)AsBooleanEndFunction<DllImport("wininet",SetLastError:=True,CharSet:=CharSet.Auto,EntryPoint:="DeleteUrlCacheGroup",CallingConvention:=CallingConvention.StdCall)>_PrivateSharedFunctionDeleteUrlCacheGroup(ByValGroupIdAsLong,ByValdwFlagsAsInteger,ByVallpReservedAsIntPtr)AsBooleanEndFunction<DllImport("wininet.dll",SetLastError:=True,CharSet:=CharSet.Auto)>_PrivateSharedFunctionFindFirstUrlCacheEntry(<MarshalAs(UnmanagedType.LPTStr)>ByValUrlSearchPatternAsString,ByVallpFirstCacheEntryInfoAsIntPtr,ByReflpdwFirstCacheEntryInfoBufferSizeAsInteger)AsIntPtrEndFunction<DllImport("wininet.dll",SetLastError:=True,CharSet:=CharSet.Auto)>_PrivateSharedFunctionFindNextUrlCacheEntry(ByValhEnumHandleAsIntPtr,ByVallpNextCacheEntryInfoAsIntPtr,ByReflpdwNextCacheEntryInfoBufferSizeAsInteger)AsBooleanEndFunction<DllImport("wininet.dll",SetLastError:=True,CharSet:=CharSet.Auto)>_PrivateSharedFunctionGetUrlCacheEntryInfo(<MarshalAs(UnmanagedType.LPTStr)>ByVallpszUrlNameAsString,ByVallpCacheEntryInfoAsIntPtr,ByReflpdwCacheEntryInfoBufferSizeAsInteger)AsBooleanEndFunction<DllImport("wininet.dll")>_PrivateSharedFunctionFindCloseUrlCache(ByValhEnumHandleAsIntPtr)AsBooleanEndFunction<DllImport("wininet",SetLastError:=True,CharSet:=CharSet.Auto,EntryPoint:="DeleteUrlCacheEntryA",CallingConvention:=CallingConvention.StdCall)>_PrivateSharedFunctionDeleteUrlCacheEntry(ByVallpszUrlNameAsString)AsBooleanEndFunctionConstERROR_ACCESS_DENIEDAsInteger=8ConstERROR_NO_MORE_ITEMSAsInteger=259ConstCACHEGROUP_ATTRIBUTE_BASICAsInteger=&H1ConstCACHEGROUP_ATTRIBUTE_FLAGAsInteger=&H2ConstCACHEGROUP_ATTRIBUTE_GET_ALLAsInteger=&HFFFFFFFFConstCACHEGROUP_ATTRIBUTE_GROUPNAMEAsInteger=&H10ConstCACHEGROUP_ATTRIBUTE_QUOTAAsInteger=&H8ConstCACHEGROUP_ATTRIBUTE_STORAGEAsInteger=&H20ConstCACHEGROUP_ATTRIBUTE_TYPEAsInteger=&H4ConstCACHEGROUP_FLAG_FLUSHURL_ONDELETEAsInteger=&H2ConstCACHEGROUP_FLAG_GIDONLYAsInteger=&H4ConstCACHEGROUP_FLAG_NONPURGEABLEAsInteger=&H1ConstCACHEGROUP_READWRITE_MASKAsInteger=&H3CConstCACHEGROUP_SEARCH_ALLAsInteger=&H0ConstCACHEGROUP_SEARCH_BYURLAsInteger=&H1ConstCACHEGROUP_TYPE_INVALIDAsInteger=&H1ConstGROUP_OWNER_STORAGE_SIZEAsInteger=&H4ConstGROUPNAME_MAX_LENGTHAsInteger=&H78#EndRegion#Region"加载数据"''''''获得指定的URL的cache文件名''''''URL'''如果不存在该cache,返回空字符串PublicFunctionGetURLCacheFileName(ByValURLAsString)AsStringDimsAsString=""DimnNeededAsInteger=0,nBufSizeAsIntegerDimbufAsIntPtrDimhEntryAsIntPtrDimCacheItemAsINTERNET_CACHE_ENTRY_INFOhEntry=FindFirstUrlCacheEntry(Nothing,IntPtr.Zero,nNeeded)nBufSize=nNeededbuf=Marshal.AllocHGlobal(nBufSize)hEntry=FindFirstUrlCacheEntry(Nothing,buf,nNeeded)IfMarshal.GetLastWin32Error()=ERROR_NO_MORE_ITEMSThenReturn""EndIfWhileMarshal.GetLastWin32Error()<>ERROR_NO_MORE_ITEMSDimreturnvalueAsBooleanDimbufferlengthAsIntegerTryCacheItem=DirectCast(Marshal.PtrToStructure(buf,GetType(INTERNET_CACHE_ENTRY_INFO)),INTERNET_CACHE_ENTRY_INFO)IfMarshal.PtrToStringAuto(CacheItem.lpszSourceUrlName).IndexOf("Cookie")>=0AndMarshal.PtrToStringAuto(CacheItem.lpszSourceUrlName).IndexOf("@apple.com")>=0Thenreturnvalue=DeleteUrlCacheEntry(Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName))Ifreturnvalue=FalseThenMsgBox(Marshal.GetLastWin32Error())'此处一直打印出代码为2的系统错误(即找不到文件路径)EndIfEndIfFindNextUrlCacheEntry(hEntry,0,bufferlength)'先获得bufferlength,再读取一次returnvalue=FindNextUrlCacheEntry(hEntry,buf,bufferlength)CatchexAsSystem.ExceptionConsole.WriteLine(ex.Message+ex.StackTrace)EndTryEndWhileMarshal.FreeHGlobal(buf)ReturnsEndFunction#EndRegionEndClass

解决方案五:
我函数名没有改,GetURLCacheFileName就是为了执行删除@apple.com的操作2楼的兄台给的VB6代码我放到.NET上试验过了。还是不行。不仅仅是COOKIE,其他脱机文件也不能删除
解决方案六:
有兄弟关注下么
解决方案七:
不好意思,最近比较忙,才来看这个帖子。你好像走了弯路,看看我删除缓存文件的方法:vb6:OptionExplicitPrivateDeclareFunctionGetUrlCacheEntryInfoLib"wininet.dll"Alias"GetUrlCacheEntryInfoA"(ByValsUrlNameAsString,lpCacheEntryInfoAsAny,lpdwCacheEntryInfoBufferSizeAsLong)AsLongPrivateDeclareFunctionDeleteUrlCacheEntryLib"wininet.dll"Alias"DeleteUrlCacheEntryA"(ByVallpszUrlNameAsString)AsLongPublicFunctionInCache(ByValURLAsString)AsBooleanIfGetUrlCacheEntryInfo(URL,ByVal0&,0)=0ThenInCache=(Err.LastDllError=122)EndIfEndFunctionPublicSubDeleteCacheURL(ByValURLAsString)DeleteUrlCacheEntryURLEndSubPrivateSubCommand1_Click()DimURLAsStringURL="http://community.csdn.net/HomePage.aspx"If(InCache(URL))ThenDeleteCacheURLURLEndIfEndSub

VB.NET:PrivateDeclareFunctionGetUrlCacheEntryInfoLib"wininet.dll"Alias"GetUrlCacheEntryInfoA"(ByValsUrlNameAsString,ByReflpCacheEntryInfoAsIntPtr,ByReflpdwCacheEntryInfoBufferSizeAsIntPtr)AsIntegerPrivateDeclareFunctionDeleteUrlCacheEntryLib"wininet.dll"Alias"DeleteUrlCacheEntryA"(ByVallpszUrlNameAsString)AsIntegerPublicFunctionInCache(ByValURLAsString)AsBooleanIfGetUrlCacheEntryInfo(URL,0&,0)=0ThenInCache=(Err.LastDllError=122)EndIfEndFunctionPublicSubDeleteCacheURL(ByValURLAsString)DeleteUrlCacheEntry(URL)EndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimURLAsStringURL="http://community.csdn.net/HomePage.aspx"If(InCache(URL))ThenDeleteCacheURL(URL)EndIfEndSub

时间: 2024-09-19 06:03:14

用DeleteUrlCacheEntry碰到的问题的相关文章

大家在碰到这样的情况下注意一下!

我正在把基于mysql数据库的程序改为基于sysbase的,可是我的程序在改完之后,执行的时候程序执行结果的页面总是不动(大白页面),刚开始怀疑是mysql的sql语句和sybase的差异造成的,可是经过检查mysql的sql语句没有发现任何的错误(原来的mysql的sql语句已经改动过了),实在没办法就从程序下手,弄了将近两个小时也没发现程序哪里有毛病.后来把sql语句屏蔽掉能看到相应的页面(但没有数值,因为数值是从数据库中提取出来的)这是怎么回事呢?正在焦头烂额的时候我无意中打开sybase

http协议- 使用http put把本地文件上传到服务器的的时候碰到的问题

问题描述 使用http put把本地文件上传到服务器的的时候碰到的问题 各位好,我在用libcurl的接口往localhost服务器上传文件里上传文件的时候出现了下面的错误(用的机器系统是linuxmint17,搭建的服务器Apache + PHP5 + MySQL)*** We read 4257 bytes from file<!DOCTYPE HTML PUBLIC ""-//IETF//DTD HTML 2.0//EN""> 405 Method

asp.net-小白看一段ASP.NET源代码时碰到的问题

问题描述 小白看一段ASP.NET源代码时碰到的问题 1C 图里面的 登录,注册,管理员登陆均点不了,其他功能正常.相关源代码: web层 <%@ Page Language=""C#"" AutoEventWireup=""true"" CodeBehind=""Gbook.aspx.cs"" Inherits=""_28_1.Gbook""

剖析在WAS 6.1.0.19上碰到/snoop时执行不完整而出现ClassFormatError

剖析在WAS 6.1.0.19上碰到/snoop时执行不完整而出现ClassFormatError 关键字: WAS Linux 6.1.0.19 snoop ClassFormatError 环境RedHat Linux + WAS 6.1.0.19 部署默认的应用程序 DefaultApplication.ear,访问 /snoop时,出现页面显示不完整,只显示 Servlet Name: 并到 Request Information: 这两项的内容, 然后在页面的源码最下面有一行,虽然源码

写PL/SQL程序时碰到的一些问题

程序|问题 记的上次写PL/SQL程序还是刚毕业不久,还用的是Oracle 7 for Novell后来只是偶尔用一下oralce, PL/SQL的一些语法已经全忘了,这不,碰到好些低级的问题,谨记下,希望不会再忘记. 1.有for update类型的Cursor定义Cursor时,加了for update,因为需要打开cursor后还要对这些数据进行修改和删除,但在修改和删除数据后在关闭cursor前就commit,就出现了下面的错误:ORA-01002: 读取违反顺序ORA-06512: 在

开发wap网站,还是碰到不少问题

问题 公司需要建一个wap网站,这个难不到咱程序员,上网找资料,看wml就找手干了.实际开发中还是碰到不少问题的,目前告一小段落就先汇总汇总. 基本架构:jsp+weblogic+sql server(看起来挺豪华的,顺便学习拉) 1.配置connectionpool和datasource,然后测试,发现总是报异常Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a c

关于在Windows中安装Oracle碰到ORA-12638错误的解决方法

oracle|window|错误|解决 今天应邀安装一个Windows上的Oracle9i数据库 不想居然碰到了一些问题 1.安装完Oracle9201软件 2.安装完Oracle9205 patchset 3.dbca创建数据库,创建过程中碰到ORA-12638错误,凭证检索失败,创建数据库失败 4.由于保存了创建脚本,所以决定用脚本执行,看看错在哪儿 5.dbca先删除了刚才创建了半半拉拉的数据库 6.运行脚本,在connect system/change_on_install as sys

使用NHibernate作为ORM容易碰到的问题

1.Could not initialize proxy - no Session. 原因:hibernate3 many-to-one的默认选项是 lazy = "proxy" >解决方法:<many-to-one>  & <set> 中设置 lazy="false" 其实只在<many-to-one>中设置lazy="false"就可以了,在set也设置的话会多一次查询. >2.没有主键

oracle分区表述的FOR语句(下)测试FOR语句时碰到的ORA-14702错误

指定一个分区除了使用分区名称外,很多时候还可以使用FOR语句. 这篇描述测试FOR语句时碰到的ORA-14702错误. 仍然使用上一篇文章的例子: SQL> CREATE TABLE T_PART_RANGE 2  (ID NUMBER, 3  NAME VARCHAR2(30), 4  CREATE_DATE DATE) 5  PARTITION BY RANGE (CREATE_DATE) 6  (PARTITION P1 VALUES LESS THAN (TO_DATE('2009-1'