C# File Handling: Create file in directory where executable exists

Viewed 42470

I am creating a standalone application that will be distributed to many users. Now each may place the executable in different places on their machines.
I wish to create a new file in the directory from where the executable was executed. So, if the user has his executable in :

C:\exefile\

The file is created there, however if the user stores the executable in:

C:\Users\%Username%\files\

the new file should be created there.

I do not wish to hard code the path in my application, but identify where the executable exists and create the file in that folder. How can I achieve this?

6 Answers

In modern operating systems, the accepted answer of:

var systemPath = System.Environment.GetFolderPath(
    Environment.SpecialFolder.CommonApplicationData
);
var complete = Path.Combine(systemPath , "files");

will produce a user agnostic path like: "C:\ProgramData\files"

To produce a user-based path similar to: "C:\Documents and Settings\%USER NAME%\Application Data\files"

You should use SpecialFolder.ApplicationData or SpecialFolder.LocalApplicationData instead.

I like to give the user the choice. I would default the directory to something like Environment.SpecialFolder.CommonApplicationData and let them read and edit the path at will. If in a console app display the path in help and allow them to pass it via command line argument. This saves them the hassle of hunting for the folder. If they point to a path you cannot write to then you throw the error and let them decide what to do.

Related