【问题标题】:Dynamically insert date into App.Config将日期动态插入 App.Config
【发布时间】:2010-12-02 09:08:47
【问题描述】:

我有一个基于控制台的应用程序,它从数据库中提取文件并将它们输出到 C 驱动器上。它还输出一个包含所有输出文件详细信息的 excel 文件。这是 app.config 文件中代码的 sn-p。

  <target name="Group1" acceptedFileTypes="pdf">
    <ftpSettings server="localhost" username="anonymous" password="user@user.com" />
    <metadataEncoder name="Group1" fileName="Group1_YYYYMMDD.xls" />
  </target>

理想情况下,当程序运行时,我希望 excel 文件以附加到其末尾的日期命名。有什么方法可以在 app.config 文件中实现这一点吗?

另外,这里是与上述 app.config sn-p 相关的类:

public class MetadataEncoderElement : ConfigurationElement
{
    private static readonly ConfigurationProperty messageName = new ConfigurationProperty("name", typeof(string), string.Empty, ConfigurationPropertyOptions.IsRequired);
    private static readonly ConfigurationProperty fileName = new ConfigurationProperty("fileName", typeof(string), string.Empty, ConfigurationPropertyOptions.IsRequired);

    public MetadataEncoderElement()
    {
        this.Properties.Add(messageName);
    }

    [ConfigurationProperty("name", IsRequired = true)]
    public string Name { get { return (string)this[messageName]; } }

    [ConfigurationProperty("fileName", IsRequired = true)]
    public string FileName { get { return (string)this[fileName]; } }
}

任何帮助将不胜感激,谢谢大家。

编辑

已将我的代码编辑为以下内容

[ConfigurationProperty("fileName", IsRequired = true)]
public string FileName = string.Format(MetadataEncoderElement.fileName, DateTime.Now);

但是现在我有以下错误:

最好的重载方法匹配 for'string.Format(System.IFormatProvider, string, params object[])' 有一些 无效参数

参数 1:无法从“System.Configuration.ConfigurationProperty”转换 到“System.IFormatProvider”

参数 2:无法从 'System.DateTime' 转换为 'string'

【问题讨论】:

    标签: c# date app-config filenames


    【解决方案1】:

    理查兹答案略有改进的版本:

    <metadataEncoder name="Group1" fileName="Group1_{0:yyyyMMdd}.xls" />
    

    在代码中

    string fileName = string.Format(yourconfig.FileName,DateTime.Now);
    

    编辑: 如果你想在你的属性中构建它,你可以这样做:

    [ConfigurationProperty("fileName", IsRequired = true)]
    public string FileName { get { return string.Format((string)this[fileName], DateTime.Now); } }
    

    【讨论】:

    • 对不起,我对此很陌生,所以我想我有时需要一些手把手;-) yourconfig 说的在哪里,我应该放什么?抱歉,这似乎是一个愚蠢的问题:-\
    • yourconfig 应该是 MetadataEncoderElement 的一个实例。您通常访问 FileName 和 Name 属性的方式。
    • 我本来是这么想的,所以我试了一下,但是我得到了错误,所以我认为它是不正确的。我已经更改了代码,但是我有三个错误。我会用错误修改我的帖子。
    • 帖子已修改。感谢您到目前为止的回复:)
    【解决方案2】:
    <metadataEncoder name="Group1" fileName="Group1_{0:yyyyMMdd}.xls" /> 
    

    那就做吧

    string fileName = String.Format(yourconfig.FileName,DateTime.Now));
    

    编辑

    您可以保持 fileName 属性不变并创建一个新属性

    public string CurrentFileName { get { String.Format(this.FileName,DateTime.Now); } }
    

    【讨论】:

    • 使用 fileName="Group1_{0:yyyyMMdd}" 然后 String.Format(yourconfig.FileName, DateTime.Now) 会更灵活
    • 我确实认为如果可能的话,但不确定它是否会起作用,我会纠正。
    • 对不起,我对此很陌生,所以我想我有时需要一些帮助;-) yourconfig 说的在哪里,我应该放什么?抱歉,这似乎是一个愚蠢的问题:-\
    • 您可以保持文件名属性完好无损,只需添加另一个返回格式化字符串的属性,我已经编辑了答案。
    【解决方案3】:

    以下对我有用..

            public class MetadataEncoderElement : ConfigurationElement
        {
            [ConfigurationProperty("fileName", IsRequired = true)]
            public String FileName
            {
                get
                {
                    return string.Format((String)this["fileName"], DateTime.Now);
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2021-01-07
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多