我想讓我的程序打開一個特定的.txt文件。該文本文件將始終保留在解決方案文件夾中的同一文件夾中。但是,如果將解決方案移至其他計算機或當前計算機上的其他目錄,解決方案文件夾本身的位置可能會發生更改。在vb.net中打開一個特定的文件
我知道如何硬編碼文件路徑追加文件名,然後打開它。但是,如何定義文件路徑,以便在解決方案移至其他計算機時仍能打開該文件?
我想讓我的程序打開一個特定的.txt文件。該文本文件將始終保留在解決方案文件夾中的同一文件夾中。但是,如果將解決方案移至其他計算機或當前計算機上的其他目錄,解決方案文件夾本身的位置可能會發生更改。在vb.net中打開一個特定的文件
我知道如何硬編碼文件路徑追加文件名,然後打開它。但是,如何定義文件路徑,以便在解決方案移至其他計算機時仍能打開該文件?
如果你的意思是說你FILENAME.TXT總是出現在同一目錄中裝配,你可以做一些簡單的像這樣:
Function GetAssemblyDirectoryPath() As String
Dim fullAssemblyPath As String = System.Reflection.Assembly.GetExecutingAssembly().Location
Return fullAssemblyPath.Substring(0, fullAssemblyPath.LastIndexOf("\"c))
End Function
這只是返回到文件夾的路徑,其中裝配駐留。 「解決方案」可能並不總是存在,但是程序集會這樣,所以這兩種情況都可以工作(如果確保文件總是被複制到輸出目錄中)。
如果文件包含在解決方案中,您可以使用使用Server.MapPath
下面應該工作的虛擬路徑,然後映射到物理路徑:
Dim filePath As String = Server.MapPath("~/FileName.txt")
請注意,位置我的示例中的FileName.txt位於解決方案的根目錄中,而不是在任何指定的文件夾中,因此~/
實質上是當前解決方案的根源。
有關方法使用Server.Mappath和虛擬路徑的詳細信息請參閱下面:
不工作。錯誤「名稱'服務器'未聲明」。沒有更正建議。 –
如果你問一個桌面應用程序,application.ExecutablePath會做什麼你想。但是,如果你的應用程序駐留在程序文件中,這不是一個好主意 - 最好避免寫入到那裏的任何地方,並且你將不得不以管理員身份在後XP操作系統上運行。
如果您確定您的應用程序(.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")
...
其實,我不認爲這一定是真的。根據這個http://msdn.microsoft.com/en-us/library/b9skfh7s。aspx,它在使用相對路徑時假定「當前工作目錄」。根據該定義(http://msdn.microsoft.com/zh-cn/library/system.io.directory.getcurrentdirectory.aspx),它並不總是與啓動進程的目錄相同。 –
@ roryap你指出了一個好處。大多數情況下,「當前工作目錄」是(.exe)文件所在的目錄。是的,有時候,它不是同一個目錄。因此,'Application.ExecutablePath'將是正確的解決方案。謝謝 –
這也不起作用,它給出了一個錯誤「可執行文件不是system.windows.forms.application的成員」。 –
這不僅僅是返回文件路徑。它返回文件路徑\ Projectname.exe,所以我不能只追加我的文件名稱。我可以做一些亂七八糟的事情,比如從字符串中取出最後n個字符,但這似乎是一個不好的選擇。 –
這不正確。 System.Reflection.Assembly.GetExecutingAssembly()。位置返回文件路徑\ Projectname.exe,但如果您使用我發佈的整個函數,它會去掉文件名並只給出文件夾路徑。 –