Write file to project folder on any computer

I'm working on a project for a class. What I have to do is export parsed instructions to a file. Microsoft has this example which explains how to write to a file:

// Compose a string that consists of three lines. string lines = "First line.\r\nSecond line.\r\nThird line."; // Write the string to a file. System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt"); file.WriteLine(lines); file.Close(); 

I'm fine with that part, but is there a way to write the file to the current project's environment/location? I'd like to do that instead of hard coding a specific path (i.e. "C:\\test.txt" ).

12.4k 24 24 gold badges 95 95 silver badges 139 139 bronze badges asked Oct 12, 2013 at 2:03 590 1 1 gold badge 5 5 silver badges 20 20 bronze badges

3 Answers 3

Yes, just use a relative path. If you use @".\test.txt" ( btw the @ just says I'm doing a string literal, it removes the need for the escape character so you could also do ".\\test.txt" and it would write to the same place) it will write the file to the current working directory which in most cases is the folder containing your program.

answered Oct 12, 2013 at 2:06 evanmcdonnal evanmcdonnal 47.7k 17 17 gold badges 109 109 silver badges 117 117 bronze badges

You can use Assembly.GetExecutingAssembly().Location to get the path of your main assembly (.exe). Do note that if that path is inside a protected folder (for example Program Files ) you won't be able to write there unless the user is an administrator - don't rely on this.

Here is sample code:

string path = System.Reflection.Assembly.GetExecutingAssembly().Location; string fileName = Path.Combine(path, "test.txt"); 

This question / answer shows how to get the user's profile folder where you'll have write access. Alternatively, you can use the user's My Documents folder to save files - again, you're guaranteed to have access to it. You can get that path by calling

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)