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中取得.