I am changing the folder icons with c# function. Its working fine but the problem is its working for first time. I mean I am not able to change the icon for the folder for w
Just change
UInt32 FCS_WRITE = FCS_READ | FCS_FORCEWRITE;
to
UInt32 FCS_WRITE = FCS_FORCEWRITE;
When you run next time the FCS_WRITE = FCS_READ, so it wont write agian.
I've faced with similar issue. Just remove the desktop.ini file before calling the function for the second time. The same scenario is used if you would like to clear folder icon:
....
FolderSettings.pszIconFile = @"{icon path}";
FolderSettings.iIconIndex = 0;
....
Just for completion, the code in question looks OK, but the 3rd param in the SHGetSetFolderCustomSettings call must be FCS_FORCEWRITE in order to change the settings if already present. (FCS_WRITE will set it ONLY if values NOT already present)
See docs about that parameter: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762199(v=vs.85).aspx