我希望我的程序打开一个特定的 .txt 文件。文本文件将始终保留在解决方案文件夹中的同一文件夹中。但是,如果将解决方案移动到另一台计算机或当前计算机上的不同目录,则解决方案文件夹本身的位置可能会发生变化。
我知道如何硬编码文件路径附加文件名然后打开它。但是如何定义文件路径,以便在解决方案移动到另一台计算机时仍然可以打开文件?
如果文件包含在解决方案中,您可以使用虚拟路径,然后使用该虚拟路径映射到物理路径Server.MapPath
以下应该有效:
Dim filePath As String = Server.MapPath("~/FileName.txt")
请注意,我的示例中 FileName.txt 的位置在解决方案的根目录中,而不是在任何指定的文件夹中,~/
本质上是当前解决方案的根目录。
有关 Server.MapPath 方法和虚拟路径的更多信息,请参见下文:
如果您确定您的应用程序 (.exe) 和 (.txt) 文件位于同一文件夹中,则只需使用文件名 - 不要输入路径。
IO.File.OpenText("thefile.txt")
编辑:大多数“当前工作目录”与(.exe)文件所在的目录相同。是的,有时,它不是同一个目录。因此,Application.ExecutablePath 将是正确的解决方案。
Dim fn As String
fn = Application.ExecutablePath.Remove(Application.ExecutablePath.LastIndexOf("\")+1) & "thefile.txt"
IO.File.OpenText("thefile.txt")
...
如果您询问的是桌面应用程序,application.ExecutablePath 将满足您的需求。但是,如果您的应用程序将驻留在 Program Files 中,这并不是一个好主意 - 最好避免写入其中的任何位置,并且您必须以管理员身份在后 XP OS 上运行。
如果您的意思是说您的 FileName.txt 始终与程序集位于同一目录中,您可以执行以下简单操作:
Function GetAssemblyDirectoryPath() As String
Dim fullAssemblyPath As String = System.Reflection.Assembly.GetExecutingAssembly().Location
Return fullAssemblyPath.Substring(0, fullAssemblyPath.LastIndexOf("\"c))
End Function
这只是返回程序集所在文件夹的路径。“解决方案”可能并不总是存在,但程序集会存在,因此这在两种情况下都有效(如果您确保文件始终复制到输出目录)。