Bernoulli Lizard
Bernoulli Lizard

Reputation: 579

Open a specific file in vb.net

I want my program to open a specific .txt file. The text file will always stay in the same folder within the solution folder. However, the location of the solution folder itself may change if the solution is moved to a different computer, or a different directory on the current computer.

I know how to hardcode the file path append the file name and then open it. But how can I define the file path so that the file can still be opened if the solution moves to a different computer?

Upvotes: 0

Views: 8421

Answers (4)

Tun Zarni Kyaw
Tun Zarni Kyaw

Reputation: 2119

If you are sure that your application (.exe) and (.txt) files are in the same folder, then just use the file name - do not put the path.

IO.File.OpenText("thefile.txt")

Edited: Mostly "current working directory" is the same directory where the (.exe) file exists. Yes, sometimes, it is not the same directory. Thus, Application.ExecutablePath would be the right solution.

Dim fn As String
fn = Application.ExecutablePath.Remove(Application.ExecutablePath.LastIndexOf("\")+1) & "thefile.txt"
IO.File.OpenText("thefile.txt")

...

Upvotes: 2

rory.ap
rory.ap

Reputation: 35318

If you meant to say your FileName.txt was always present in the same directory as the assembly, you could do something simple like this:

Function GetAssemblyDirectoryPath() As String
    Dim fullAssemblyPath As String = System.Reflection.Assembly.GetExecutingAssembly().Location
    Return fullAssemblyPath.Substring(0, fullAssemblyPath.LastIndexOf("\"c))
End Function

This just returns the path to the folder where the assembly resides. The "Solution" might not always be present, but the assembly will, so this will work in both cases (if you make sure the file is always copied to the output directory).

Upvotes: 1

peterG
peterG

Reputation: 1641

If you're asking about a desktop application, application.ExecutablePath will do what you want. It's not really a good idea though, if your application will reside within Program Files - it's best to avoid writing to anywhere within there, and you will have to run as administrator on post-XP OS's .

Upvotes: 1

Nunners
Nunners

Reputation: 3047

If the file is contained within the solution, you can use a virtual path which is then mapped to a physical path using Server.MapPath

The following should work :

Dim filePath As String = Server.MapPath("~/FileName.txt")

Please note that the location of FileName.txt in my example is in the root of the solution and not in any specified folders, ~/ is essentially the root of the current solution.

For more information on the Server.MapPath method and Virtual Paths see below:

Server.MapPath MSDN Documentation

Virtual Path Utility Class

Upvotes: 2

Related Questions