2010-12-02 42 views
2

J'ai une application basée sur la console qui extrait les fichiers d'une base de données et les sort sur le lecteur C. Il génère également un fichier Excel avec les détails de tous les fichiers en sortie. Voici l'extrait de code du fichier app.config.Insérer dynamiquement la date dans App.Config

<target name="Group1" acceptedFileTypes="pdf"> 
    <ftpSettings server="localhost" username="anonymous" password="[email protected]" /> 
    <metadataEncoder name="Group1" fileName="Group1_YYYYMMDD.xls" /> 
    </target> 

Idéalement, lorsque le programme fonctionne, je voudrais que le fichier Excel pour être nommé à la date ajouté à la fin de celui-ci. Est-ce que je peux réaliser cela dans le fichier app.config?

De plus, voici la classe qui se rapportant à l'extrait de app.config ci-dessus:

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]; } } 
} 

Toute aide serait appréciée, merci les gars.

EDIT

avoir modifié mon code à

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

suivante Mais maintenant, je les erreurs suivantes:

La meilleure méthode surchargée correspondance for'string.Format (System.IFormatProvider, chaîne, paramètres objet []) 'a certains invalide argum ents

Argument 1: ne peut pas convertir from'System.Configuration.ConfigurationProperty » sur 'System.IFormatProvider'

Argument 2: ne peut pas convertir les 'System.DateTime' à 'chaîne'

Répondre

4

version légèrement améliorée de réponse Richards:

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

dans le code

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

EDIT : Si vous voulez le construire dans votre propriété, vous pouvez le faire de cette façon:

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

désolé, je suis assez nouveau à ce sujet, donc je pense que j'ai besoin d'un peu de prise de main parfois ;-) Où est dit yourconfig, que dois-je mettre là-bas? Désolé si cela semble être une question stupide: - \ – 109221793

+0

votreconfig devrait être une instance de MetadataEncoderElement. La façon dont vous devriez normalement accéder à vos propriétés FileName et Name. – Hinek

+0

Je pensais qu'à l'origine donc j'ai essayé, mais j'ai eu des erreurs donc j'ai pensé que ce n'était pas correct. J'ai changé le code mais j'ai trois erreurs. Je vais modifier mon message avec les erreurs. – 109221793

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

Puis faire

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

EDIT

Vous pouvez garder votre propriété fileName comme il est et de créer une nouvelle propriété

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

Il serait plus souple d'utilisation fileName = "{0 Group1_: aaaaMMjj}", puis String.Format (yourconfig.FileName, DateTime.Now – Hinek

+0

Je pensais que si c'était possible, je n'étais pas sûr que cela fonctionnerait, je me suis corrigé. –

+0

édité pour l'exactitude :-) –

1

Les oeuvres suivantes pour moi ..

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