Question

I have a a string for a path for a file my program reads data from. I want to improve the robustness and I recall seeing someone do .\blabla\blalbla\ but I'm finding it a bit hard to find a topic that explains how this work so I can implement it into my program.

My path (I'm aware that the naming isn't correct but it'd interfere with my property if I named it with a capital P)

private const string path = @"C:\Users\zain\Desktop\program_storage\AccountDatabase.txt";

I'd like it to be something like .\program_storage\AccountDatabase.txt (this doesn't work unfortunately) as it'd mean I can move the program around without having to change the string in the constants class.

Any and all help is appreciated

Was it helpful?

Solution

You can use something like the following to store/read the file:

var dir = Path.Combine(Environment
    .GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyProgram");
if(!Directory.Exists(dir))
    Directory.CreateDirectory(dir);
var path = Path.Combine(dir, "AccountDatabase.txt");

This will use or create a folder in the App_Data of your user account and then return the path to a file in that folder. See the Environment.SpecialFolder enum for other locations possible.

OTHER TIPS

You can use the IsolatedStorageFile class in the System.IO.IsolatedStorage namespace to easily access a directory that is isolated for the application and user:

See the MSDN documentation for more information: http://msdn.microsoft.com/en-us/library/3ak841sy(v=vs.110).aspx

There is a good example on MSDN here

This provides a nice abstraction from the physical location on the hard disk, and supports both local and roaming user profiles.

Note -

if using a local profile then the physical location is still going to be the <SYSTEMDRIVE>\Users\<user>\AppData\Local directory (for windows Vista/7/8/server 2008), as per the other answer

Note 2 -

You can also use a static method on IsolatedStorageFile to obtain a machine-scoped store (All Users)

IsolatedStorageFile isoFile = IsolatedStorageFile.GetMachineStoreForApplication();

This gets you the <SYSTEMDRIVE>\Users\All Users\AppData\Local directory on Windows Vista or later

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top