我的任务是创建一个簿记程序来跟踪文件和文件夹何时被读取的一些统计数据。与 Google Drive 和 TortoiseSVN 类似,文件夹和文件图标应反映某些变化。例如,带有未在某台计算机上查看过的文件的 USB 带有“x”,而查看过的文件则带有“o”。
我可以使用 this Windows API 跟踪文件使用情况,并且可以通过 desktop.ini 文件更改图标(以及其他一些不错的选项)[1,2,3,4] .
在手动修改 desktop.ini 文件的同时,我已经成功地更改了图标、描述和其他有趣的东西。问题是新的更改不会更新,直到 Windows 再次解析 desktop.ini 文件。这往往会在几秒到几分钟之间不一致地发生。 F5 刷新不会强制重新解析,但会在重新解析发生时更新图像。
如何强制 Windows 手动和(更重要的)在 C++ 程序中重新解析 desktop.ini 文件?
是否有替代的 C++ Windows API 可以立即更改文件夹图标?
如果你编辑 desktop.ini,它的资源管理器不会自动刷新。使用
SHGetSetFolderCustomSettings
写信给它:
SHFOLDERCUSTOMSETTINGS fcs = {0};
fcs.dwSize = sizeof(SHFOLDERCUSTOMSETTINGS);
fcs.dwMask = FCSM_ICONFILE;
fcs.pszIconFile = iconPath;
fcs.cchIconFile = 0;
fcs.iIconIndex = iconIndex;
SHGetSetFolderCustomSettings(&fcs, folderPath, FCS_FORCEWRITE);
如果你希望有不同的文件夹图标来区分不同的状态(类似于SVN)那么你需要图标叠加。更改文件夹图标不是合适的解决方案。文件夹图标的变化将立即反映出来 如果您需要更多详细信息,请告诉我。
string folder = "folder";
// Edit your folder\\desktop.ini
string flush = "attrib +s "+folder;
system(flush.c_str());
您可以使用此 C++ 代码刷新“文件夹”中的
desktop.ini