強制重新整理圖示快取
開發Mac平臺的應用程式時遇到一個熱更新圖示的需求。
Mac的應用程式是.app
bundle,圖示檔案放在test.app/Contents/Resources/
路徑,在test.app/Contents/Info.plist
中指定。
可是,更換.icns
圖示檔案後,Finder裡不即時更新顯示。如何繞開快取機制,強制重新整理顯示圖示呢?當然,得是以程式設計方式實現。
搜到一些建議。
重建Launch Services資料庫,
lsregister -kill -seed -r
lsregister -f <.app path>
無效。
修改bundle的時間戳。
touch /Applications/App.app
無效。
有人提到“建立-刪除”一個檔案的方法,有人嘗試了這個方法,告訴大家說,他嘗試了所有bundle裡的目錄都無效,除了test.app/
。測試有效。謝謝他。
Qt測試程式碼,建立一個資料夾,再刪除,
QDir junk;
junk.mkdir(strBundlePath + "/junk");
junk.rmdir(strBundlePath + "/junk");
可是緊接著在其他電腦上測試發現,有時還是無效。
研究發現,無效時,test.app/
bundle目錄裡有一個檔案Icon?
。
它其實是Icon\r
,終端裡的自動補全會顯示為Icon^M
。這個檔案是幹嗎用的?怎麼產生的?這裡有詳細介紹。
說是改變資料夾圖示時會產生這個檔案,實測發現,只在右鍵test.app
bundle選擇“Get Info”,拖動圖片檔案到Info對話方塊左上角圖示位置時,會產生這個檔案。不知道有沒有其他動作也會。
有這個檔案的時候,前面說的“建立-刪除”資料夾/檔案方法無效,可能的原因是“when you change the icon, it is not actually applied to the folder itself but rather to the 'Icon\r' file inside the folder”。
解決方案是刪除它。測試程式碼如下,
QFile jfile(strBundlePath + "/Icon\r");
if(jfile.exists())
jfile.remove();
QDir junk;
junk.mkdir(strBundlePath + "/junk");
junk.rmdir(strBundlePath + "/junk");
專案里加上這樣的程式碼真是無奈,所謂笨辦法吧。
Windows平臺上,新圖示編譯在.exe
檔案裡,可是.exe
檔案熱更新後,桌面的快捷方式圖示一樣存在快取不能立刻重新整理的問題。思路類似,沒再嘗試,舉例如下,來自這篇部落格。
rem 關閉Windows外殼程式explorer
taskkill /f /im explorer.exe
rem 清理系統圖示快取資料庫
attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"
del /f "%userprofile%\AppData\Local\IconCache.db"
attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"
rem 清理 系統托盤記憶的圖示
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream
rem 重啟Windows外殼程式explorer
start explorer
相關文章
- 瀏覽器的快取機制—強快取與協商快取瀏覽器快取
- 強制快取(200)和協商快取(304)快取
- windwos清理圖示快取快取
- http強制快取、協商快取、指紋ETag詳解HTTP快取
- 區分http請求狀態碼來理解快取(協商快取和強制快取)HTTP快取
- 瀏覽器三種重新整理方式所採取的快取機制瀏覽器快取
- win7如何清理圖示快取Win7快取
- 重新整理dns快取命令 dns快取清除命令DNS快取
- Web 快取機制 與 快取策略Web快取
- MyBatis快取機制(一級快取,二級快取)MyBatis快取
- 淺解強快取和協商快取快取
- Mac 重新整理本地 DNS 快取MacDNS快取
- 圖解 HTTP 的快取機制 | 實用 HTTP圖解HTTP快取
- HTTP快取機制HTTP快取
- Mybatis快取機制MyBatis快取
- LRU快取機制快取
- 前端快取機制前端快取
- web快取機制Web快取
- client快取機制client快取
- http快取策略以及強快取和協商快取淺析HTTP快取
- nginx強制不快取Nginx快取
- 瀏覽器強快取與協商快取瀏覽器快取
- 從WebView快取聊到Http 的快取機制WebView快取HTTP
- 對於前端快取的理解(快取機制和快取型別)前端快取型別
- CPU快取重新整理的誤解快取
- 最強本地快取Caffeine快取
- 微信web端 後退強制重新整理Web
- mybatis的快取機制MyBatis快取
- Redis 快取失效機制Redis快取
- mysql的快取機制MySql快取
- MyBatis 的快取機制MyBatis快取
- Win10系統如何重新整理dns快取 win10重新整理dns快取的方法Win10DNS快取
- 快取圖片快取
- 圖片快取快取
- Win10系統重建圖示快取的方法【圖文教程】Win10快取
- 瀏覽器快取淺談(強快取與協商快取的認知)瀏覽器快取
- http系列--徹底理解瀏覽器的快取機制(http快取機制)HTTP瀏覽器快取
- Nginx快取原理及機制Nginx快取