January 8, 2008
What is user space? User space is the location in the filesystem where users put their personal files-- their "stuff". Here's the user space folder structure in the Windows XP operating system:
\Documents and Settings\User\
\My Recent Documents
And here's the user space folder structure in the Windows Vista operating system:
This new Vista user space folder structure may seem oddly familiar to people using operating systems based on Unix. It gives new life to the famous quote "Those who do not understand Unix are condemned to reinvent it, poorly". Regardless, I'm glad we no longer have to deal with a scarily long default user path -- with aggravating embedded spaces, even-- to our personal stuff. If a user is keeping notes in a text file, we can reasonably expect to find those notes at the following path:
\Documents and Settings\User\My Documents\notes.txt
Now that we've established what and where user space is, I have a message for all the programmers reading this-- including myself. Keep your dirty, filthy paws out of my personal user space!
Take a look in your
Documents folder right now. Go ahead. Look. Do you see any files or folders in there that you personally did not create? If so, you've been victimized. Applications should never create or modify anything in your documents folder without your permission. And yet, sadly, it happens all the time. Applications, and more specifically, the programmers who wrote those applications, think it's perfectly A-OK to carpet bomb your personal user space with their junk.
Well, it isn't.
As Omar Shahine originally pointed out almost two years ago, we should be mad as hell, and we shouldn't take it any more. If applications need to store shared files, that's what the
\Application Data folders are for. In OS X, which inherits a lot of filesystem conventions from BSD Unix, Apple has a great set of guidance appropriately titled Don't Pollute User Space:
It is important to remember that the user domain (
/Users) is intended for files created by the user. With the exception of the
~/Library directory, your application should never install files into the user's home directory. In particular, you should never install files into a user's
Documents directory or into the
/Users/Shared directory. These directories should only be modified by the user.
Even if your application provides clip art or sample files that the user would normally manipulate, you should place those files in either the local or user's
Library/Application Support directory by default. The user can move or copy files from this directory as desired. If you are concerned about the user finding these files, you should include a way for the user to browse or access them directly from your application's user interface.
Discovering this made me realize how much I missed the good old days of strict operating system and GUI conventions. Granted, Apple is cheating quite a bit by inheriting the well-worn conventions of classic Unix operating systems. But so much of Windows seems dangerously ad-hoc in comparison.
At any rate, it is our obligation as programmers to let the user's folders belong to the user. Do the responsible thing and store your application files in an appropriate location, not as virtual litter amongst the user's other files. Please don't pollute user space.
Posted by Jeff Atwood
So where should programs save their files? I thought writing to the C:\program files\program directory was a no-no? Doesn't that give a UAC warning? Your program certainly shouldn't write to C:\directory
Actually, "Users" and "Library" are NextStep conventions, not the historic unix/linux ones (which use "home" and "lib" for much the same purpose, displaying the unix allergy to uppercase letters and uncontracted words).
Re the "dot files": remember that on unix/linux, files/directories beginning with a period are hidden files and don't show up in normal listings. Though I wish they'd picked /home/username/.etc/ to dump them all in.
The one I hate the most is "My eBooks". Even if I delete it the first
time I load up Adobe Reader it re-appears in My Documents.
So use the free Foxit reader instead.
I hate all this "My Pictures" "My Skype Shared Files" "My Buggy C# Code" that Windows seems obsessed with. I know it's mine, it's on my PC (or at least my profile).
And no, Visual Studio shouldn't create its own folder to put your files in. That should be your job. What if I have somewhere else that I store source because I don't just use Visual Studio? Just make step 1 of the startup wizard "where do you want to store your files?".
Ask me where I want stuff to go, don't tell me where it's going... it's MY documents after all, as Windows is so insistent on telling me. That means it conforms to MY structure.
When programs want to store data they should ask the user, and default to My Documents, just like MS Office does. If it wants to save a directory structure then make the program ask the user on its first run where that should go.
Now someone change the Unix convention so we get a "Documents" directory so that our work isn't mashed in with hundreds of dotfiles and bits of random junk ;-)
Vista is a vast improvement on the handling of user home *directories/folders* (user space is a memory/process issues) over any previous Windows I've used. However, it appears that Linux is picking up bad habits from Windows, at least the KDE desktop environment (or some of its apps are). Imagine my surprise after years of never seeing automatically generated visible directories in /home/user when I suddenly saw things like "Documents" and "Music"! At first I thought this was because I share my main personal /home/user and mount it on other machines (including a Vista system) and that Windows had somehow done this to me. Not so. Turned out it was KDE that done it.
As for .hidden directories on Linux/Unix: they are not-visible by default in the GUI and via `ls` and normally I wouldn't put .hidden directories in /home/user for my own purposes. So .hidden directories are good for user-specific data, like configs or saved games... where else would you put that data on a Linux system since /home/user is probably the only place an app can write without privilege escalation?
On the other hand, what are VBA script kiddies like me supposed to do? I'm someone who writes a fair amount of scripts and solutions for Microsoft Office, and being able to just plunk my crummy little template into C:\Documents and Settings\Geoff\Application Data\Microsoft is kind of handy, in many cases. That way, I'm the only one who's the victim of my crappy macros. :)
Even funnier is that Microsoft breaks the Mac OSX convention as well. Install Microsoft Office on your Mac and you get a Directory called 'Microsoft User Data' in ~/Documents as opposed to ~/Library/Application Support which is where it should go.
I couldn't agree more, and it drives me absolutely nuts (most especially when non-user editable files are dropped in my documents; for example saved games and application configuration files. If the user never directly opens the file for manipulation it belongs in application data). However vista has come to the rescue!
I have found that the only viable way to use Vista is to not view hidden files and folders (as there are so many more) but this has afforded me the opportunity to us mklink at the command line to make a symbolic link in the documents folder pointing to where the file really should be stored, which I then hide. I suppose I could just hide the offending folder in documents, but this way I know absolutely where that file is (with all other similar files) and it *isn't* hidden in that location when I want to go find it. I think mklink is my single favorite thing in vista as it allows me to organize the file system how I want, not how any other developer wants (what they hell do they know about how my system is configured).
It is also a great way to move the user directory off of the system partition so that I can format/reinstall the OS without jeopardizing my user files.
I haven't used Vista much, because what little bit I have used I've hated, but the user data directory system seems even more awkward than XP. I do agree though, half of the folders in my main documents folder were not created by me. Why couldn't those go in the Application Data folder?
On a side not, Jeff, I have a recommendation. Alex over at The Daily WTF just implemented a new feature where he highlights his favorite user comments on each post, these show up in blue at the top of the comments. It would be nice, since you have so many commenters, to see the same thing here. Just a thought.
I agree that Windows apps should be more courteous and consistent about where they store things.
Microsoft has other ideas. Vista introduced the new, extensible Known Folder system, which offers much fuller Windows-integrated support for adding all sorts of application-specific crap to user space:
Frankly, the mess that results from this sort of thing is largely the result of Microsoft's failure to lead software developers effectively. If MS was better at explaining what features were intended to accomplish, apps would be more consistent and polite. If MS was interested in making Windows a little more actively self-administering, a lot of these things could be gently guided toward consistency by the "make the easy thing the right thing" principle.
Well you know what, developers used to store settings in the application's program folder and in the windows folder. That was before we cared about security and everybody ran as an admin. Nowadays, I write my config files, etc to Application Data, whether the User's one or the All Users one.
Jeff I have to agree, like others I frequently uninstall programs that put more stuff in my My Documents folder, as titled those are My Documents, not application documents.
oh, and Cabbage let me introduce you to "ls -al".
"(Yes, you can hide them, but then what do you do when you actually want to see them besides hunting around in configuration dialogs to find the checkbox to make them visible again?)"
What do you mean, "dialog boxes"?
alive@m00h test $ ls
alive@m00h test $ ls -a
./ ../ .hiddenfile visiblefile
There. That makes perfect sense, doesn't it?
But my arrogance to the side, if you prefer to use a graphical file manager and a graphical text editor to "hunt around" in your "hidden files", I'd suggest Nautilus where you can just click "View-Hidden Files" to show all the "hidden" files in your system.
This is such a bad problem to me that I put all my personal files on a separate drive, mounted at /media/files. My /home/justin directory just contains the Desktop directory and tons of hidden configuration stuff.
I absolutely can't stand having OS configuration data mixed in with my personal files. Am I in the minority here? Both Linux and Windows do it by default.
I disagree with your thesis. The less computer-savvy a user is, the more appropriate it is to add some things to "user space". A program responsible for pulling images from a digital camera for example. The pictures should definitely go in the folder the user expects (My Pictures).
If I'm playing a game, I'd rather have my saved game files show up in "user space" in a folder named "WhizBang Saved Games" than have those files tucked away under some arbitrary AppData folder.
Moreover, I really like the way Linux stores application data in .folders, like .mozilla, or .wine. The dot puts them out of the way during a regular ls -l command, but still leaves them in a convenient location like ~/.wine/drive_c/ when I want to get to something. If Windows can't hide dot-folders in it's graphical shell (Windows Explorer), then that's what needs to be fixed, not the programmers who are storing data in an intelligent way.
Finally, if you don't want my dirty, filthy paws on your user space, I suggest you not run any programs that I write. It's not my fault you chose a half-assed operating system shat into the world by a convicted monopolist.
I put all my documents into directories i create. I don't use the My Documents or Documents folders.
I PREFER apps to place directories for there projects/files in the Documents folder. Like Visual Studio. I prefer projects to go in the Documents/VS2008 folder when i DO NOT specify a directory. I wish ALL programs would create a directory inside Documents and use that as the DEFAULT save locations. Then i know where stuff was dumped and don't have to go looking for it when i want to place it into a REAL folder.
Because apps do not do this i must ALWAYS select the final resting place for documents OR create the directory in Documents to dump into, before i finally move them to a real directory.
I Use Documents, Downloads, Pictures, and Music as temporary resting places before organizing them properly. I cannot imagine the mess I would have otherwise.
Personally this issue never bothered me, but stuffing "My Documents" full of various folders can become annoying if you have tons of apps which put their things there...
However my biggest annoyance with this (and the whole app data thing) is ANYTHING which puts ANYTHING AT ALL on my C: drive. DO NOT PUT STUFF ON MY C: DRIVE WITHOUT ASKING ME.
I constantly have to clean up C because of stupid apps which put their stuff there. Almost all bigger apps and some games put gazillion megabytes of files, eventually clogging up C: to the point where you no longer have enough free space on the partition. ARGH.
As others have said the main issue issues are as follows:
1) No one has even discussed the difference between "roaming" and "local" users yet. Most programmers don't know the difference. This means that there are two different sets of preferred folders for a local user. On XP the naming is ridiculous. At least they improved it a bit on Vista.
2) There is no clear guidance from Microsoft.
3) The folders that are considered "preferred" are actually marked as hidden by default so users can't find them anyway. Why they did this I'll never know.
4) It is hard to distinguish between what a "user" creates and what a "program used by the user" creates.
5) It is difficult to support applciations that can be installed for either multiple users or just a single user. It should be a simple base path change to support both but it isn't. This is also confusing for users.
6) Multi-user folder ownership is difficult. If a standard user creates a new folder under the shared documents area then they are the sole owner (even though it is under a shared folder). Other users can see the files in this folder but they can't delete or modify them. In a world where users used to always run as administrators this wasn't an issue. But now that users are supposed to be running as standard/limited users we have to worry about giving all users on the machine ownership to each folder we create.
Interesting how the operating systems' conventions are converging. Kudos to Microsoft for not letting ego get in the way, and going with (mostly) similar folder names to Apple. This is good for users. (And even though I rarely use Windows, I am sincerely thankful for the liquidation of the embarrassing "My Pony" naming convention!)
Mac OS 9 (1999) actually had a user accounts and home folders system, which it inherited from At Ease (c 1991). But no one used it. The default start-up had no user account associated, and users continued to put their files wherever they felt. It's a good thing that the clean break of OS X was able to impose a tidy new organization on both users and developers.
I've migrated my user folder through several machines since the previous century, and the only intrusive folders appearing are the empty ~/Documents/AdobeStockPhotos (now trashed) and Apple's ~/Documents/iChats, containing my chat logs. Yes, iTunes and iPhoto each drops its own folder into Music and Photos respectively. Perhaps if Apple created them today, these apps would store their data in ~/Library (you can move and rename music files and folders and iTunes won't blink, but woe be on ye who touches anything in iPhoto Library).
In Mac OS X, you can also add an ~/Applications folder, and the OS will support applications' system services. Of course you can still drag a program into any other folder and still run it. Putting user apps here lets you move your entire account to another mac by copying the user folder, but it is easier to let the Migration Assistant do this.
It's too bad that XP's chaos drove all the savvy users to use a separate folder or hard drive, as attested by so many comments here. Although Vista has an improved structure, it looks like MS isn't encouraging developers to clean things up, so the transition could be a long one.
With OS X Leopard adding the new Downloads folder, both OSes now have a very similar home folder structure.
In Mac OS, no standard folders are hidden:
AppData [= ~/Library/]
Contacts [= ~/Library/Application Support/AddressBook/?]
Favorites [= ~/Library/Safari/]
Links [how is this different from "Favorites"?]
Saved Games [= ~/Library/game/, perhaps]
Searches [= ~/Library/Saved Searches/]
Videos [= ~/Movies]
By the way, since the Mac OS X file system is not path based, the folder names are internationalized. So if I go to the International System Preference and drag #1056;#1091;#1089;#1089;#1082;#1080;#1081; to the top of the language list, when I next log in to that account the home folder names are displayed as #1041;#1080;#1073;#1083;#1080;#1086;#1090;#1077;#1082;#1080;, #1044;#1086;#1082;#1091;#1084;#1077;#1085;#1090;#1099;, #1047;#1072;#1075;#1088;#1091;#1079;#1082;#1080;, #1048;#1079;#1086;#1073;#1088;#1072;#1078;#1077;#1085;#1080;#1103;, #1052;#1091;#1079;#1099;#1082;#1072;, #1054;#1073;#1097;#1080;#1077;, #1056;#1072;#1073;#1086;#1095;#1080;#1081; #1089;#1090;#1086;#1083;, #1057;#1072;#1081;#1090;#1099;, and #1060;#1080;#1083;#1100;#1084;#1099;. Will Vista do this?
This once again makes me glad that I almost never have to use Windows. :-)
There are very, very, VERY few Linux programs that do this, and they're almost all commercial.
We are fighting between rigid order and flexible disorder.
I mean, when MsDos ruled, applications stored ALL their data ONLY in their own installation folder. Uninstalling was easy: Just delete the folder. As time goes by, apps get more powerful and for some reason they spread into increasingly deep and hidden folders. It is supposed there are reasons for this. First, the reason was avoiding waste of space in hard disks. But now hard disks have lots of space, specially if you measure it for an application basis (not in an emule basis, for example, where a lot of space is always few for those users).
Why spreading apps, then?
This problem is very old, and years ago I made a decision which (after so much time) is absolutely correct. I don't use "My Documents" at all, I keep all my "user data" in a different directory, with my own hierarchy, on a different partition. If I delete everything in "My Documents" I won't have a psychological trauma after that (worst case scenario - some programs will lose some of their configuration, which will be created from scratch and reset to default values when the program is started again).
Generally, I think it is important to keep my stuff away from the system stuff. It's something like "compartimentalization" (as described in Schneier's "Beyond fear"), a problem "here" won't affect the stuff "there". You can read more about it on this forum: http://forum.dekart.com/showthread.php?t=954highlight=separate+data
- Visual Studio 2005 (also default storage for projects, ofc, but has a lot of stuff I do not even know what it is good for),
- SQL Server Management Studio (have not opened that folder until today) and
are like the worst programs doing that.
I totally agree that programs should not use those folders without having the user point them there, especially if AppData or such would be much more appropriate.
Aaron G: The guidelines, contrary to (apparently) popular belief, are very clear: if saving a file is an interactive process, start them off in My Documents. If the users can't choose the location, then it goes in AppData. If you desperately need them to be able to find it later, then give them an option to find it later. It's really very simple and straightforward.
I wish that kind of simplistic attitude actually worked. You may want to re-read my post above.
Your "rule" doesn't address "local vs. roaming". It doesn't address the issue of "standard users vs. admins" and ownership/privileges and the havoc it wreaks on programs meant to be used by all users on the system.
The world was easy when everyone ran as admins. By default in XP, files/folders created by admins are owned by all other admins on machine. And when everyone is an admin that all works fine. But files created by limited users on XP are NOT automatically owned by all other users. And it often takes admin privileges to grant permissions on them to other users. So if a standard user creates a text file while using your program then no other user can touch it... even if it is in a public folder!
So you may want to go back and make sure that your simplistic approach is really the right implementation. As I said, it is definitely not simple or clear and given that most programmers are still trying to write to c:\Program Files, we have a long way yet to go.
Regarding "user space", MS named the dir "Users", so "user folder" sounds better.
Or "home", "home dir", so converters will feel at "home" on their switch.
Finally someone to write my thoughts on paper (well sort of), especially the strict conventions part. Bravo!
The less computer-savvy a user is, the more appropriate it is to add some things to "user space".
I agree with you totally ,the geeks posting are only considering themselves in this matter (selfish!).Average Joe's should also be considered here.i think it is too late to change anything now ,you just can't wean Average Joe's on user space pollution to the point that it becomes normal for them and decide to change it when they are most comfortable with it.the bottom line is : the user space standards should have been enforced in the "beginning".
Also when programming a C++ only library namespaces should be used to prevent for example my vec2, vec3 and mat4 classes clashing with yours or worse, using a prefix on every single class.
It has the added advantage that it makes the library code more readable:
I can then either pollute my global namespace by saying:
or I can use:
Which has the added advantage of autocompletion after typing in chris:: in most modern IDEs. Also using chris::vec2 shows that I know where it is coming from and tells other programmers instantly that I know where it is coming from.
Personally, I think as far as multiuser goes MS have got lots wrong. This is one of them.
The problem is that you end up with things that are specific per user being stored in "wrong" places - if you use a mandatory profile nothing actually is actually written back to the profile. (and why does MS insist on storing some registration details in the User part of the profile, my software should be registered per computer not the bloody user!)
The only place, in XP at least, to put thing is in the "My Documents" area, as those are the ones that the user will be able to access anywhere. (or should be if you've created folder redirection)
And to all you saying you don't use "My Documents" - why don't you just move where "My Documents" targets to? My Documents is just a system setting pointing to somewhere.
You're right, but what I find even more annoying is that you have no *easy* way to configure the path of your "user space". I've two drives and I always save my documents on another drive than c:. This way, I'm always sure that I can format my c: drive without loosing anything (since I'm loosing IE favs and settings :( ).
[quote]Take a look in your Documents folder right now. Go ahead. Look. Do you see any files or folders in there that you personally did not create? If so, you've been victimized. Applications should never create or modify anything in your documents folder without your permission. And yet, sadly, it happens all the time. [/quote]
Well Jeff, I took a look at my Documents folder, and guess what I found... a folder called 'Family.Show'. Rings a bell?
Maybe you'd beter be telling the above to your co-workers.. ;-)
you should place those files in either the local or user's Library/Application Support directory by default
Just so you know, the path is "~/Library/Application Support". I noticed that you didn't format the "Support" with the rest of the path, so maybe somebody at Apple messed that up, or maybe you missed it. But now you know.
Also, plenty of Mac OS X applications (like ... Office) do install things in the user space, and it pisses me off. As of right now, the current applications have installed data on the TOP LEVEL of my user directory:
Linotype FontExplorer X
Limewire (at least I assume that's where the "Incomplete" folder came from, but it's empty, so now it's gone)
Poison (a p2p client for OS X)
I don't even use thes p2p clients anymore. And that's not to mention all the stuff in my Documents folder. AARG.
The first thing in my OSX based Documents folder not created by me?
Appleworks User Data.
Not that I'm suggesting they're hypocrites or anything.
This whole issue is the reason that I ignore Documents and Settings, and keep my files in a (very unix-like) structure of my own creation. The penalty is that I frequently have to re-target default paths, (eg, when saving from my word processor). That's where customizing the "Places Bar" comes in handy. (See Microsoft's TweakUI.)
YES YES YES YES! I can't stand it anymore. Do you know what I do?
I don't use the My Documents directory... come on, let'em write all the bull crap they want in those ugly and hard to find (in the file system) directories... I make my own "c:\MyName" directory...
So I went and looked at my "My Documents" folder, oh what a mess. Then I took it a bit further and looked at my C drive, oh what a mess. I really need to get better orginized....
If it wasn't for Google Desktop I don't think I could find anything, ever...
It is funny how much everyone is like 'waking up' to find this issue. "My ..." has been trashed and abused for a long time now. Software developers move from creating weird and crazy stuff in the registry to "poluting" "My ..." folders. Overall I just ignore those folders for personal use and never store anything there. In the software development app settings go to Application Data and any other files I need to store: user chooses the location.
You guys all don't get it.
When the computer says those files are "My Documents", it means literally that they're the computer's documents, not yours. So of course no one should store his/her docs in this folder ;D
Ok, what about in the case of Quicken files (QDFs) that are stored in My Documents\Quicken in my experience this placement has helped several users who had catastrophic HD failures and it allowed the USER to retreive the data (most are familiar with MyDocs, but you try to explain the AppData location with hidden folders, etc). In this case I consider the MyBusiness.QDF to be a user-generated file just like a DOC, JPG, etc.
so vista gets rid of the "my" naming convention (which is fantastic) but they still use "program files"? why didn't they change it to "programs"?
What's worst is the games that give themselves a folder in My Documents instead of Application Data or elsewhere. These aren't my documents!
I used to keep my stuff in a folder in C:\, but My Documents has its own convenient button in the Windows file dialog.
my evernote files
my google gadgets
my skype content
this has p!ssed me off so much in the past that i no longer use the docssettings dir for any of my personal stuff - i keep it all on a seperate drive and let all the crap apps destroy the default space as they wish
I OH so fully agree..
Admittedly, my "My Documents" folder is so crufty, I didn't even notice when it happened, but once when I was cleaning it up, I accidentally deleted all my save game files for about 6 different games.. because I KNEW I hadn't saved anything important in files like "EA Games" in my my documents folder.. and then later, when I opened one of the games again, I was rather confused why it had lost all my settings.. All previous games I had played, rather rationally, used "Application Data" to store their settings...
And, besides that, I don't use \documents and settings\%user%\my documents.. I've always used my own folder in the C drive, but since windows 2000, I've redirected my documents to it, for simplicity, since some programs insisted on opening up to my documents by default EVERY SINGLE OPEN/SAVE....
I get so annoyed by this too. Microsoft did a decent job with the user directory structure in Vista, then they themselves didn't stick to it.
- Documents\Visual Studio 2005 ?
- Documents\Visual Studio 2008 ? Come on, learn your lesson
I don't even save my projects there because it's not *MY* folder, it's a folder the program created. I save them to my own Software Projects directory.
If you use Windows Fax/Scanner you get two more folders:
- Scanned Documents
And what's with games wanting to make their own directories in Documents? Even the "Games For Windows" certified games, you'd think they'd use the User Name\Saved Games\ folder.
If Microsoft lead the way, perhaps others would follow, but that doesn't mean it's all Microsoft to blame. I have lots of other directories in my Documents folders from other non-MS programs. I even have files in my User Directory created by GIMP and that's a GNU program.
The best I can do is to set these directories to hidden, because if I delete them, they'll be back. But then, some MS apps make directories that can't even be hidden.
It makes it awkward to make backups, I'd love to be able to select my Documents folder and add that to the backup list, but first I have to un-check all of the crap that I DON'T want to backup.
I completely agree. Office 2004 (Mac) creates ~/Documents/Microsoft User Data/ which bugs me to no end.
Jeff beats me yet again to another article I had planned (sadly, I am too bogged down to blog at this time).
Junctions and attributes are the saving grace here: hide them and redirect them somewhere more sensible.
A good rule of thumb for developers: If a user searches for it and double-clicks it in Explorer to access it, it is a user document. Otherwise, it is appdata. Exception: databases are always appdata unless the user is developing their own.
I totally agree, but why is there a Twitty (a Twitter client made by Vertigo) folder in My Documents?
HELP. I need some links to point a developer to that has developed a brand new application and with it he creates 5 folders into the ROOT of the C drive. I argue that it is wrong and he says it's fine that I know nothing. Well I know not to write to the root of the OS.
ANyone have any MS docs that xplains why this is bad?
ummm, there's nothing inherently wrong with that Doug, it generates unnecessary clutter, but there's no danger to it.
btw, why is the captcha ALWAYS orange?
Yeah, I was wondering that too. Seems to be working, though, because there's no spam. Also, this is a very late response to the post, but it'll bother me if I don't..
My issue with My Documents is I CAN NEVER FIND IT. I've used Windows since 3.1, so I'm familiar with the 95...Vista user model, and I'm a pretty competent user at the worst of times, but I still have to muddle through, as it seems that any combination of the following folder names: Documents and Settings, Shared User's Documents, Users, Docuemnts, My Documents, User's Documents will get you there eventually if you keep clicking.
I walked through my local airport terminal shortly before it opened and that's what the Windows User Filesystem structure reminds me of; a whole bunch of empty folders/counters/doorways and unintelligble or blank signage directing you to the next collection of empty folders/counters/doorways.
I don't know anyone that uses My Documents except my Mother, except at work where I.T. limits the ability of users to change default save locations or registry settings and people get too lazy to drop things into their H: drives..
The problem with the personal structure (My 'something') is that is very loosy.
I once tried to get the My Document folder elsewhere (on another hard drive), yes that's possible and with the eulogies of Microsoft, but you got so many junk with it that you cannot keep the folder as a backup file(or you will get a lot of useless,protected and read-only files on your backup file) and surely prefer to have a new one (and fresh [empty]) when you format your OS drive (that's happening a lot on XP OSes).
I also really don't think that the FALSE protection layer for the applications defaults and tweaked settings should be there (by any means, even if that mean losing your configuration settings of a program and have to get the parameters again in your program after a format).
So as the system tree of the windows core doesn't keep a centralized library (see Linux and Unix system) but dll files in the original installation folder and If you format a lot and keep your installation folder on another hard drive, then this is a good idea to keep the default parameters in the installation folder (I don't really understand why microsoft keeps on insisting on a messy folder tree, even for the core)
And for some users (or should I say PowerUsers), having a default application folder in the secretely placed AppData or anything else near this folder is really annoying (a lot of Save Games lost because of it, when you think that the installation folder keeps the Saved Games in the installation folder...)
Sorry guys, too much information even for me (I now have a supra headache for myself, gonna get microsoft to pay the bills of my doctor). lol
I personally feel that this re-vamp of file structure was the best new "feature" in Vista.
That's a good point, Steve S. I don't know why, when Dell et al can ship HDDs with a recovery partition, they can't ship with at least two partitions visible to Windows. One for windows itself (say 20GB) and the other one for all the user's apps and data and where My Documents automatically points to. At least many corporations do this for their desktop machines. At home I thought about setting up my DIY win2k system variables to follow my 4 partition system (boot, documents/pictures, music, downloads), but it seemed too much bother.
Since I grew up on DOS/Win3.11, I only really took to using the personal space provided by the OS when I got OSX with my MacBook. The personal space is easy to get at with the command prompt and I've even found that after 6 months of cold turkey I don't even need the tree view I that Windows had made me addicted to. In fact, after hating it at first, I'm starting to want the column view in Windows.
A program I've been working on for a while uses has three "layers" of data:
1. Application Files - Files are never updated (yeah, still working on the updater module for that 8^D). This stays in the C:\Program Files\Dillie-O Digital\Deck Studio folder
2. Application Data - There are only two files, but they are updated periodically through an update feature. They are stored in the C:\ProgramData\Dillie-O Digital\Deck Studio folder or the C:\Documents and Settings\All Users\Application Data\Dillie-O Digital folder based on your OS. Interestingly enough, I have to work the UAC and the Manifest to allow Users to write to this location in order for the update process to work properly.
3. User Data - The custom deck (and a sample one) files that a user creates simply goes into the C:\Users\User\Documents or C:\Documents and Settings\User\My Documents folder based on OS.
Everything I've seen up to this point says this is the "recommended" way to do things and will also cause the least hassle with the Vista UAC. Am I missing something here?
I'm quite happy as well that they restructured the naming to the User folder. I've actually started using it slightly since then 8^D
I just make a folder with a custom name within Documents, and use that as my "user space". No other app can pollute it because they don't know what it is. Any "official" user folder will eventually be polluted by software. Unless of course someone will pull their head out of their ass and invent an OS where every app has its own sandbox...
Wrong, Wrong, and Wrong.
Developers should use the user space to store information.
This is especially true one machine is shared among more than one user. For example, say I have a machine that is shared among 4 family members. Each family member is going to have its own login. If you develop an application that is configurable, it natural to use the current logged in user's personal space to store that information. Its easy to maintain with code as no pathing needs to be hardcoded on a per user basis as .net has method calls to retrieve this information automatically. So when each user logs into your application, the correct file is pulled to configure the application. Otherwise, how are you going to store files for each user, create directories for them under your application and maintain that structure? Extra work IMHO. The structure is already created for you by Windows. Use it with only a few lines of code.
Additionally, the user area is one area of the machine that a program should be able to read and write from all the time, so naturally it a good location to write and read files from. Other areas of the the drive may not be accessible if the user has limited privileges and are not garanteed to be accessible. Therefore, the user area is prime choice to store files without encountering permission type errors.
If you want to truly create you own area, create a directory on your hard drive and only assign your user access to it and store your crap there.
"Apple has a great set of guidance appropriately titled Don't Pollute User Space"
Funny, iTunes is polluting my user space.
All of the nerd reasons for polluting the Documents folder have already been addressed, and yet people continue to repost them.
You want users to be able to move/copy/e-mail them? Put a link to that folder in the program's UI. It's seriously not that hard. If it's something like a full-screen game, then put the link in the app's Start Menu group and name it "XYZ Saved Games" - that way it's also easy to find using the search box on Vista.
Oh, but you want to be able to back up all your program data! How on earth are you supposed to back up stuff in the "Application Data" folder? Oh, that's right... you take six seconds to put a checkbox next to it in your backup software. And don't even try to complain that average users won't know where to find it, because we all know that average users don't make backups at all (even most geeks don't bother).
But save games are files that the user created!!! No, they aren't. The user has no awareness of the name of this file, where it's going, or even that it exists at all. It's like saying I've created radio waves by dialing on my cell phone; do I even care, much less have a desire to categorize them? It's an implementation detail, and for all your average gamer knows, his save games are being beamed from ex-Soviet satellites or bound by magical energies (most likely the latter). An unprompted save game is as much a "document" as something in my browser cache - which, by the way, is in AppData for non-IE browsers and a special folder for IE.
Folks, stop making excuses. As Raymond Chen puts it, the one and only reason for this pollution is that developers and product managers grossly overestimate the importance of their software. Oh dear, how will our users, who will undoubtedly be using Awsomo 3.1 for 17 hours every day to create thousands if not millions of documents, be able to organize this vast array of data if we don't help them do it? God forbid it might end up in the same directory or universe as another program's documents!
Get over it - your crapplication isn't that interesting. And most of the time, the regular Joes don't even want that level of organization. They expect anything and everything to be on their desktop, and if not there, then maybe right in their Documents folder. Any deeper nesting than that ("My Received Files") just confuses them. You aren't helping them by providing one more layer of indirection.
The guidelines, contrary to (apparently) popular belief, are very clear: if saving a file is an interactive process, start them off in My Documents. If the users can't choose the location, then it goes in AppData. If you desperately need them to be able to find it later, then give them an option to find it later. It's really very simple and straightforward.
You are right, in that there should be a ~/config/ folder that holds all of the .appname files/folders. However, you are also wrong in that your Documents folder is ~/Documents, and that's the one we are talking about.
Yes, this is a another flaw in Windows. I don't put any documents into My Documents, but My Documents is always expanded when I start browsing folders. I have to collapse it to save screen space.
Except iTunes music stays ok in My Documents. That way I never have to worry about where the music files are when I rearrange my real folders. When I buy a song, I don't have to name the file nor choose a folder for it before I can listen to the song, too. That is progress.
I totally agree! Microsoft Updates even screw up the C: root directory.. Its annoying especially when you want to organize stuff.. What's even worse? All, if not most of these files are useless and its pretty hard to know which is what to go on with deleting them..