如何在.NET项目文件夹中而不是默认情况下在bin / Debug文件夹中创建文本文件

时间:2019-08-24 13:36:19

标签: c# .net visual-studio

我在Visual Studio中有一个非常简单的.NET控制台应用程序。我正在尝试将一些单词写到文本文件中。

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

如果文件不存在,则应用程序在自动生成的文件夹bin / Debug中创建它。 是否可以在项目目录中创建.csproj文件的方法?

更重要的是,在实际应用程序中,当您处理文件时,是否将它们保存在bin / Debug中?这就是为什么.NET首先在此处创建它们的原因?

3 个答案:

答案 0 :(得分:0)

  

有没有一种方法可以在项目目录中创建.csproj文件?

是的。如here (second answer)所述,您可以使用构建后事件在文本文件中记录$(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:/处创建文件。

答案 1 :(得分:0)

您可以在项目的根目录中创建文本文件,并始终使用copy使其与可执行文件位于同一位置。如果这只是一个只读文本文件,那么可以,因为Windows不允许您修改驻留在OS驱动器中“程序”文件夹中的文件。

如果您想让代码修改这些文本文件,则需要将它们放在appdata文件夹中。在现实世界中,我在许多项目中都这样做。我的winforms可以使用所有数据库,WPF应用程序需要放在AppData文件夹中。

答案 2 :(得分:0)

  

有没有一种方法可以在项目目录中创建.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