MattGWagner
MattGWagner

Reputation: 1156

Command-Line App Read from File in C#

I am writing a small command-line tool for my own daily tasks, and having problems reading from a XML file I have used for configuration. As per the examples, I use this code to load the XML file for Linq-to-XML.

    XDocument doc = XDocument.Load("SearchSources.xml");

What I'm having problems with is when I "deploy" my app and XML to c:\windows\system32 for easy access, it won't work when I try to launch the file from the RUN prompt (e.g. run => TOOL -commands) because it's looking for the XML relative to wherever I launch the application.

I could obviously change the path to be the full path, e.g. c:\windows\system32\SearchSources.xml in the code, but that would prevent me from running it via F5 in Visual Studio.

EDIT: I am attempting to do this in code, rather than modifying configuration files when I deploy the app to other locations.

Upvotes: 1

Views: 1378

Answers (4)

Alistair Evans
Alistair Evans

Reputation: 36503

Use:

String filePath = System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().Location
) + @"\SearchSources.xml";

That will create a path to the file based on the directory of the executable.

Or using Path.Combine, as suggested:

String filePath = System.IO.Path.Combine(
    System.IO.Path.GetDirectoryName(
         System.Reflection.Assembly.GetExecutingAssembly().Location
    ),
    "SearchSources.xml"
);

Upvotes: 7

BFree
BFree

Reputation: 103760

Create a Settings file in Visual Studio (Right click project, add-> new item -> Settings file ). There you can create a string with the path name to your file. In code, you can access it like this:

Properties.Settings.Default.MyString

This will create an xml file (app.config). I would then store the path in there, and use that in my app. That way, when you deploy it, you can just open the XML file in any text editor and edit the path.

Upvotes: 0

d4nt
d4nt

Reputation: 15789

Try doing this:

var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
var file = Path.GetDirectoryName(myAssembly.Location) + "\\SearchSources.xml";

This will get the location of the current executable, then build a path from the executable's folder and the name of the file you're after.

Upvotes: 1

Burt
Burt

Reputation: 7758

Sounds like you need a config file with the path to the xml file in it. At install time you could modify the path if required.

Upvotes: 0

Related Questions