【问题标题】:Create app config file if doesn't exist C#如果不存在 C#,则创建应用程序配置文件
【发布时间】:2023-03-16 12:41:01
【问题描述】:

当我尝试打开我的应用配置文件时

ConfigurationManager.OpenExeConfiguration(filePath);

它返回一个异常,因为没有文件。但在这种情况下我需要创建这个文件。但据我所知,通过在 VS 中添加 How to: Add an Application Configuration File to a C# Project 来创建配置文件

那么,如何以其他方式创建此文件?

【问题讨论】:

  • 如果用户删除了配置文件,为什么要创建它?在打开文件之前检查文件是否存在(或处理异常),如果找不到配置,则使用默认值
  • 我认为,用户不会删除它。文件开头不存在。
  • 它只是一个文本文件——您可以像创建任何其他文本文件一样创建它。但正确的方法是在设计时将其包含在您的项目中。
  • 我认为实际的问题是 filePath 应该是 exe 的路径,而不是配置文件的路径。然后你不会得到异常,当你调用 Save() 时,将为你创建文件。

标签: c# .net app-config configuration-files


【解决方案1】:

如果你真的想在运行时创建一个空的配置文件,你可以这样做,但请注意,如果配置文件已经存在,此代码将覆盖它

System.Text.StringBuilder sb = new StringBuilder();
sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
sb.AppendLine("<configuration>");
sb.AppendLine("</configuration>");

string loc = Assembly.GetEntryAssembly().Location;
System.IO.File.WriteAllText(String.Concat(loc, ".config"), sb.ToString());

【讨论】:

  • "sb.toString()" 应该是 "sb.ToString()",否则完美答案。谢谢!
  • 非常棒的@RobVermeulen,谢谢!我已经编辑了答案。
  • 这是一个一半的答案。
  • 你可以检查文件是否已经存在,这样会更完整。
【解决方案2】:

只需转到App.config 文件属性并将复制到输出目录设置从不复制更改为始终复制(或如果更新则复制)。这将在项目构建期间自动创建配置文件。

【讨论】:

  • 如果项目中没有App.config,如何创建myapp.exe.config
  • @ArtemKyba 为什么不简单地将App.config 添加到项目中?
  • 客户想要不加:)
【解决方案3】:

您的应用程序需要此文件,因为您需要访问它。 最好的方法是在编写时使用 Visual Studio 添加它。您必须确保在设置时将其正确部署在目标机器上。

如果它在运行时不存在于磁盘上,那么崩溃是一个很好的行为。您可以向用户显示一条消息(捕获异常)。

【讨论】:

    【解决方案4】:

    为什么要以其他方式创建它?是否确保您始终拥有一个配置文件,即使用户删除了它?为什么用户会这样做?哦,没关系。

    如果您想确保始终有一个配置文件,如果没有,您可以自己创建:

    if (!File.Exists(configFilePath)) ...
    

    配置文件只是 XML。因此,您可以在要从中读取密钥之前创建一个新文件并使用默认数据填充它。

    但是,人们希望用户不要删除配置文件。只是说说而已。

    【讨论】:

    • 这种解决方案总是闻起来像竞态条件; .NET Framework 忽略 TxF。
    【解决方案5】:

    将应用程序配置文件添加到 C# 项目中

    在菜单栏上,选择 Project > Add New Item.*

    出现添加新项目对话框。

    展开已安装 > Visual C# 项目,然后选择应用程序 配置文件模板。

    在名称文本框中,输入名称,然后选择添加按钮。一种 名为 app.config 的文件已添加到您的项目中。

    【讨论】:

    • 我不确定我们是否需要您将 Ms 文档剪切并粘贴到答案中。对链接的简单评论就足够了
    • 它也完全没有抓住问题的重点......
    猜你喜欢
    • 2018-03-24
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2014-07-20
    • 2020-08-18
    • 2018-10-09
    相关资源
    最近更新 更多