非淡泊无以明志,非宁静无以致远 -心静如止水,动于静

Win Internet API產生的鬼影

在做案子的時候﹐用C#調用WinInet API, 其中有一個函數是刪除一個FTp folder下所有的Normal文件, 所以用WinInet API中的FtpFindFirstFile函數﹐剛開始使用這個函數的時候對于dwFlag參數給了一個0. 在真正使用過程中發現第一次刪除的時候是可以正確刪除﹐但是在關閉連接后﹐再刪除相同Folder下的文件時(注意此Folder已被第一次調用時清空了), 跟蹤時發現此Folder下仍然存在文件(實際上已經不存在了)。最初考慮有可能是dot net framework中的垃圾回收機制并未執行close()動作﹐于是在close()后在強制回收. GC.Collect(). GC.WaitForPendingFinalizers(); 但仍不啟動作﹐上網找了許久﹐原來是dwFlag用的不對。將它改成:

 

const int INTERNET_FLAG_RELOAD = unchecked((int)0x80000000);

....

IntPtr hFind = NativeMethods.FtpFindFirstFile(hConnect, filter, out fileData, INTERNET_FLAG_RELOAD, IntPtr.Zero);

 

這樣每次find的時候都強制從服務器重新取得﹐而不是從Cache中取得.

posted @ 2008-08-14 10:06  烟雨客  阅读(288)  评论(0编辑  收藏  举报