Get Relative Path of a File in C#

  1. Get Relative Path of a File With the Path Class in C
  2. Get Relative Path of a File With the Resources.resx File in C

This tutorial will discuss methods to get the relative path of a file in C#.

Get Relative Path of a File With the Path Class in C

For this tutorial, I will be talking about the following directory structure.

/MyProject
    /Bin
        Main.exe
    /Folder
        Img.jpg
        Main.cs

When our program executes, it does so from the Main.exe file inside the Bin directory. We want to write our code starting from or relative to the Bin directory. We want to access the Img.jpg file inside the Folder directory. This problem can be easily handled by one of the following methods.

The Path class performs operations on strings variables containing file paths in C#. The Path.GetDirectoryName() function gets the information about the current directory. We can pass the Assembly.GetExecutingAssembly().CodeBase as a parameter to the Path.GetDirectoryName() function to get information about the output directory of our project.

var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);

We can then combine the resultant path with the short relative path to our Img.jpg file to create a relative path to our Img.jpg file.

var iconPath = Path.Combine(outPutDirectory, "Folder\\Img.jpg");

We can then convert this new path to our relative path string with the Uri.LocalPath property.

string icon_path = new Uri(iconPath ).LocalPath;

The following code example shows us how we can perform all the above-mentioned steps in C#.

var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);
var iconPath = Path.Combine(outPutDirectory, "Folder\\Img.jpg");
string icon_path = new Uri(iconPath ).LocalPath;

The string variable icon_path is now the relative path to the file Img.jpg and can be used to reference the image throughout our code’s execution.

Get Relative Path of a File With the Resources.resx File in C

When we have some external resources that we want to use in our application, such as an image icon, we have to utilize a resources.resx file in C#. The resources.resx file works as a record of all the resources our application uses. Once we have added a resources.resx file in our project and referenced all the required resources, we can easily access all the resources with Resources.Resource1 command. The following code example shows us how we can get a file’s relative path with the resources.resx file in C#.

using mynamespace.Properties
var imgpath = Resources.img;

The imgpath variable can be used as the reference to the Img.jpg file throughout our code’s execution in C#. This method should be preferred over the previous method because it is easier to understand, simpler to write, and keeps our code organized.

Contribute
DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.

Related Article - Csharp Path

  • Get Executable Path in C#
  • Related Article - Csharp File

  • Write a Stream to a File in C#