強制重新整理圖示快取
開發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快取
- 重新整理dns快取命令 dns快取清除命令DNS快取
- Web 快取機制 與 快取策略Web快取
- MyBatis快取機制(一級快取,二級快取)MyBatis快取
- 圖解 HTTP 的快取機制 | 實用 HTTP圖解HTTP快取
- Mac 重新整理本地 DNS 快取MacDNS快取
- HTTP快取機制HTTP快取
- web快取機制Web快取
- 前端快取機制前端快取
- LRU快取機制快取
- Mybatis快取機制MyBatis快取
- 淺解強快取和協商快取快取
- 對於前端快取的理解(快取機制和快取型別)前端快取型別
- CPU快取重新整理的誤解快取
- http快取策略以及強快取和協商快取淺析HTTP快取
- MyBatis 的快取機制MyBatis快取
- mybatis的快取機制MyBatis快取
- 瀏覽器強快取與協商快取瀏覽器快取
- 使用 reloadNuxtApp 強制重新整理 Nuxt 應用UXAPP
- http系列--徹底理解瀏覽器的快取機制(http快取機制)HTTP瀏覽器快取
- 最強本地快取Caffeine快取
- Win10系統如何重新整理dns快取 win10重新整理dns快取的方法Win10DNS快取
- node中的快取機制快取
- HTTP快取機制及原理HTTP快取
- 黑科技:LocalStorage 快取機制快取
- Nginx快取原理及機制Nginx快取
- 瀏覽器快取機制瀏覽器快取
- yii2 快取機制快取
- http快取機制及其原理HTTP快取
- RecyclerView快取機制(scrap view)View快取
- SDWebImage 快取機制(筆記)Web快取筆記
- HTTP----HTTP快取機制HTTP快取
- 微信web端 後退強制重新整理Web
- Web快取知多少(快取機制和資料儲存)Web快取
- Redis 的高效能快取機制的三類問題:快取擊穿、快取雪崩 和 快取穿透Redis快取穿透