簡體   English   中英

如何在.NET項目文件夾中而不是默認情況下在bin / Debug文件夾中創建文本文件

[英]How to create text file in .NET project folder, not in bin/Debug folder where is by default

我在Visual Studio中有一個非常簡單的.NET控制台應用程序。 我正在嘗試將一些單詞寫到文本文件中。

using (StreamWriter file = File.AppendText("log1.txt"))
{
       file.WriteLine("Hello from the text file");
}

如果該文件不存在,則應用程序在自動生成的文件夾bin / Debug中創建它。 有沒有一種方法可以在我有.csproj文件的項目目錄中創建此文件?

更重要的是,在實際的應用程序中,當您使用文件時,會將它們保留在bin / Debug中嗎? 這就是為什么.NET首先在此處創建它們的原因?

有沒有一種方法可以在我有.csproj文件的項目目錄中創建此文件?

是。 如此處所述(第二個答案),您可以使用構建后事件在文本文件中記錄$(ProjectDir)的值(使用命令echo $(ProjectDir) > ..\\..\\projectdir.txt )。 此宏包含.csproj的目錄。 在構建過程之后,此命令將使用項目目錄創建文件projectdir.txt ,因此您將在代碼中讀取此文件的內容,並使用其內部內容傳遞給File.AppendText作為基本目錄來創建文件log1.txt

更重要的是,在實際的應用程序中,當您使用文件時,會將它們保留在bin / Debug中嗎? 這就是為什么.NET首先在此處創建它們的原因?

那要看你想做什么。 在您的情況下,代碼在bin/Debug處創建文件,因為這是可執行文件的執行位置。 當您省略File.AppendText的完整路徑並僅將"log1.txt"作為參數傳遞時,它將在與可執行文件所在的文件夾中創建文件。 如果要使用其他文件夾,則應在此處指定文件夾(例如File.AppendText("C:/log1.txt")將在C:/創建文件。

您可以在項目的根目錄中創建文本文件,並始終使用copy使其與可執行文件位於同一位置。 如果這只是一個只讀文本文件,則可以,因為Windows不允許您修改駐留在OS驅動器中“程序”文件夾中的文件。

如果您想讓代碼修改這些文本文件,則需要將它們放在appdata文件夾中。 在現實世界中,我在許多項目中都這樣做。 我的winforms所有的數據庫工作,WPF應用程序需要放在AppData文件夾中。

有沒有一種方法可以在我有.csproj文件的項目目錄中創建此文件?

是的,但這只能在您處理項目時完成。 一旦完成開發並嘗試發布它,您將無法訪問您擁有.csproj文件的位置,因為發布后您可以將其安裝在任何PC上,並且它也沒有您正在處理的項目。

更重要的是,在實際的應用程序中,當您使用文件時,會將它們保留在bin / Debug中嗎?

不,我認為在您所處的環境中,實際應用程序是指您可以在任何PC上運行的已發布項目“ .exe”。 Windows為您提供了三個在編寫程序時應使用的數據文件夾,以便在發布后可以順利運行:

  • 用戶數據
  • 漫游用戶數據
  • 所有用戶資料

您可以使用Environment.SpecialFolder在.NET應用程序中訪問上述文件夾:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

根據您給定的代碼,請嘗試以下操作:

var fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), 
                              "log1.txt");
using (StreamWriter file = File.AppendText(fileName))
{
    file.WriteLine("Hello from the text file");
}

這樣,您將能夠發布程序,並且仍然可以順利進行,而無需像以前一樣對路徑進行硬編碼。

這就是為什么.NET首先在此處創建它們的原因?

如果您未指定完整路徑,則僅文件名.NET查找可執行文件的工作目錄,在本例中為bin/Debug

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM