0

我希望我的程序打开一个特定的 .txt 文件。文本文件将始终保留在解决方案文件夹中的同一文件夹中。但是,如果将解决方案移动到另一台计算机或当前计算机上的不同目录,则解决方案文件夹本身的位置可能会发生变化。

我知道如何硬编码文件路径附加文件名然后打开它。但是如何定义文件路径,以便在解决方案移动到另一台计算机时仍然可以打开文件?

4

4 回答 4

2

如果文件包含在解决方案中,您可以使用虚拟路径,然后使用该虚拟路径映射到物理路径Server.MapPath

以下应该有效:

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

请注意,我的示例中 FileName.txt 的位置在解决方案的根目录中,而不是在任何指定的文件夹中,~/本质上是当前解决方案的根目录。

有关 Server.MapPath 方法和虚拟路径的更多信息,请参见下文:

Server.MapPath MSDN 文档

虚拟路径实用程序类

于 2013-10-09T15:09:54.307 回答
2

如果您确定您的应用程序 (.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")

...

于 2013-10-09T15:25:42.030 回答
1

如果您询问的是桌面应用程序,application.ExecutablePath 将满足您的需求。但是,如果您的应用程序将驻留在 Program Files 中,这并不是一个好主意 - 最好避免写入其中的任何位置,并且您必须以管理员身份在后 XP OS 上运行。

于 2013-10-09T15:14:02.490 回答
1

如果您的意思是说您的 FileName.txt 始终与程序集位于同一目录中,您可以执行以下简单操作:

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

这只是返回程序集所在文件夹的路径。“解决方案”可能并不总是存在,但程序集会存在,因此这在两种情况下都有效(如果您确保文件始终复制到输出目录)。

于 2013-10-09T15:16:17.473 回答