Holy cow, I wrote a book!
Mike Williams asked in the Suggestion Box
why Explorer shows a + sign next to a folder
even though it doesn't have any children.
Mind you, this wasn't a suggestion; it was just a random question.
I don't enjoy answering random questions about specific details of
user interface elements since, as it turns out,
I did not write every single user interface element in the system,
nor did I attend all of the design meetings.
Some people are under the impression that as a senior developer that
works with the user interface,
I naturally attend every single user interface design meeting,
even meetings to discuss things that I am not responsible for.
I don't know when these people expect me to get my work done
or why I would enjoy going to hundreds of
meetings that have nothing to do with my job.
These people probably expect
a senior electrical engineer at Boeing to attend all meetings
on each of the 777's electrical systems, even if her responsibility
is just the entertainment system.
Another reason I don't enjoy answering these questions is that
the person who asks the question is unlikely to be interested in the
answer, since the answer is usually boring and technical.
Anyway, I don't know the answer, but I'm going to guess.
(Actually, that sentence applies to most of what I write.
I just guess with confidence.)
Recall that Explorer is a view onto the shell namespace,
and that each item in the shell namespace has attributes.
The attribute that is important here is
which indicates that the item is a folder that
might have sub-folders.
This is a strange backwards-like flag,
since it is the absence of the flag that provides definite
If SFGAO_HASSUBFOLDER is not set, then
the shell namespace extension is promising that the folder
has no sub-folders.
If the flag is set, then the folder might have sub-folders,
or it might not; no promises.
Explorer uses this flag to determine whether to show a plus-sign
next to an item in the Explorer folder view.
If the flag is set, then a plus sign appears.
Yes, this means that the plus sign appears even if there are no
but it's better than showing no plus sign when there are
When you click the plus sign, Explorer goes looking for sub-folders,
and if it ultimately finds none, then the plus sign disappears.
Why not require that the flag be definite?
In other words, why not say that SFGAO_HASSUBFOLDER
guarantees the presence of a sub-folder,
rather than merely hinting at the possibility of a sub-folder?
Determining whether a folder has a sub-folder can be very expensive.
For example, if the folder is a directory on a server halfway
around the world,
hunting for a sub-folder requires enumerating the contents of the directory
looking for anything that's a sub-directory.
(Yes, you could try using the
FindExSearchLimitToDirectories information level,
but there is no guarantee that the server halfway around the world
This is quite an expensive undertaking just to decide whether to show
a plus sign,
and corporate administrators might not look too fondly on the
"unnecessary" network traffic generated by all this probing.
What's more, determining whether there is a sub-folder may require
additional user interaction.
For example, the folder might be on a password-protected FTP server.
It would not be a very good design to prompt the user to log in to
an FTP server just so Explorer could decide whether or not to show
a plus sign next to the server's icon in the folder tree.
I believe that Windows Vista sheds a much more skeptical eye
on the SFGAO_HASSUBFOLDER flag.
In part because some shell namespace extensions mis-manage the flag
(forgetting to set it when they should)
and because some users get upset by the "plus sign that doesn't do anything",
Explorer's kicks off a background thread to verify the
plus-sign status of each item in the folder tree,
or at least verify what it can without
causing network administrators grief or
disturbing the user.
(Users wouldn't like it if you, say, spun up the CD-ROM drive just to
check whether or not to show that plus sign.)
If you watch carefully, you might see a tiny magnifying glass overlay
placed atop the folder icon while this background verification takes place.
The remaining questions in that same comment are even less interesting.
Clicking the plus sign will make it go away once Explorer has
confirmed that there are no sub-folders after all.
Perhaps the namespace extension is slow to enumerate sub-folders?
And as for the cancellation of renaming:
I don't see this behavior.
When a file copy completes in the background, I can still rename
whatever I was renaming.