2013-10-09 42 views
0

我想讓我的程序打開一個特定的.txt文件。該文本文件將始終保留在解決方案文件夾中的同一文件夾中。但是,如果將解決方案移至其他計算機或當前計算機上的其他目錄,解決方案文件夾本身的位置可能會發生更改。在vb.net中打開一個特定的文件

我知道如何硬編碼文件路徑追加文件名,然後打開它。但是,如何定義文件路徑,以便在解決方案移至其他計算機時仍能打開該文件?

回答

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 

這只是返回到文件夾的路徑,其中裝配駐留。 「解決方案」可能並不總是存在,但是程序集會這樣,所以這兩種情況都可以工作(如果確保文件總是被複制到輸出目錄中)。

+0

這不僅僅是返回文件路徑。它返回文件路徑\ Projectname.exe,所以我不能只追加我的文件名稱。我可以做一些亂七八糟的事情,比如從字符串中取出最後n個字符,但這似乎是一個不好的選擇。 –

+0

這不正確。 System.Reflection.Assembly.GetExecutingAssembly()。位置返回文件路徑\ Projectname.exe,但如果您使用我發佈的整個函數,它會去掉文件名並只給出文件夾路徑。 –

2

如果文件包含在解決方案中,您可以使用使用Server.MapPath

下面應該工作的虛擬路徑,然後映射到物理路徑:

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

請注意,位置我的示例中的FileName.txt位於解決方案的根目錄中,而不是在任何指定的文件夾中,因此~/實質上是當前解決方案的根源。

有關方法使用Server.Mappath和虛擬路徑的詳細信息請參閱下面:

Server.MapPath MSDN Documentation

Virtual Path Utility Class

+0

不工作。錯誤「名稱'服務器'未聲明」。沒有更正建議。 –

1

如果你問一個桌面應用程序,application.ExecutablePath會做什麼你想。但是,如果你的應用程序駐留在程序文件中,這不是一個好主意 - 最好避免寫入到那裏的任何地方,並且你將不得不以管理員身份在後XP操作系統上運行。

1

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

...

+0

其實,我不認爲這一定是真的。根據這個http://msdn.microsoft.com/en-us/library/b9skfh7s。aspx,它在使用相對路徑時假定「當前工作目錄」。根據該定義(http://msdn.microsoft.com/zh-cn/library/system.io.directory.getcurrentdirectory.aspx),它並不總是與啓動進程的目錄相同。 –

+0

@ roryap你指出了一個好處。大多數情況下,「當前工作目錄」是(.exe)文件所在的目錄。是的,有時候,它不是同一個目錄。因此,'Application.ExecutablePath'將是正確的解決方案。謝謝 –

+0

這也不起作用,它給出了一個錯誤「可執行文件不是system.windows.forms.application的成員」。 –

相關問題