I want to create a program that converts files. I would like the user to be able to place the executable file in any directory, and when executing that program (double-clicking on the .exe) I want the program to process all the files within the current folder where the exe file exists. How can the program determine the path in which it is currently executing?
I tried System.Windows.Forms.Application.StartupPath
but that seems to be the wrong way.
Any ideas?
Use Application.StartupPath
for the best result imo.
I created a simple console application with the following code:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);
I copied the resulting executable to C:\temp2
. I then placed a shortcut to that executable in C:\temp3
, and ran it (once from the exe itself, and once from the shortcut). It gave the following outputs both times:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
While I'm sure there must be some cockamamie reason to explain why there are five different methods that do virtually the exact same thing, I certainly don't know what it is. Nevertheless, it would appear that under most circumstances, you are free to choose whichever one you fancy.
UPDATE:
I modified the Shortcut properties, changing the "Start In:" field to C:\temp3
. This resulted in the following output:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...which demonstrates at least some of the distinctions between the different methods.
Try this:
If you want the exe path you can use System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
This works best for me, especially when using dotnet core single file publish.
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
.
System.AppDomain.CurrentDomain.BaseDirectory
This will give you running directory of your application. This even works for web applications. Afterwards you can reach your file.
This block of code makes a path of your app directory in string type
string path="";
path=System.AppContext.BaseDirectory;
good luck
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Returns the directory information for the specified path string.
From Application.ExecutablePath
Gets the path for the executable file that started the application, including the executable name.
Use this,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
You can use this as well.
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
for .NET CORE use System.AppContext.BaseDirectory
(as a replacement for AppDomain.CurrentDomain.BaseDirectory
)
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
Source: Stackoverflow.com