2010-03-22 5 views
3

J'essaie de créer un nouveau fichier journal toutes les heures avec le code suivant sur un serveur. Le premier fichier journal de la journée est en cours de création et écrit correctement, mais aucun fichier journal supplémentaire n'est créé ce jour-là. Des idées sur ce qui pourrait mal tourner? Aucune exception n'est levée non plus.StreamWriter ne crée pas de nouveau fichier

private void LogMessage(Message msg) 
{ 
    string name = _logDirectory + DateTime.Today.ToString("yyyyMMddHH") + ".txt"; 

    using (StreamWriter sw = File.AppendText(name)) 
    { 
     sw.WriteLine(msg.ToString()); 
    } 
} 

Répondre

6

L'utilisation de DateTime.Today met à zéro la partie temps. Vous devez utiliser DateTime.Now ou DateTime.UtcNow pour que le DateTime renvoyé contienne une heure différente de zéro.

+0

Il utilise DateTime.Today pour créer un fichier portant ce nom. L'utilisation de DateTime.Now pour le nom de fichier n'a aucun sens car il souhaite réutiliser le fichier pour le jour en cours. – MadBoy

+0

@MadBoy, à partir de la question OP: ("J'essaie de créer un nouveau fichier journal toutes les heures"). Le 'DateTime' retourné est alors formaté pour contenir seulement le composant de date et d'heure. –

+0

d'oh! merci JA. * pend la tête dans la honte * – fearofawhackplanet

0

Il semble que votre chemin d'accès ait été incorrect en raison de l'utilisation de datetime.today. Essayez d'utiliser Path.Combine dans la fonction pour éviter d'autres erreurs comme '/' ajouter etc MSDN

1

Aujourd'hui donne seulement la date actuelle. Donc HH est toujours "00". Essayez plutôt DateTime.Now.ToString ("yyyyMMddHH").

0

La raison pour laquelle vous obtenez seulement un fichier est due à votre utilisation de DateTime.Today au lieu de DateTime.Now. DateTime.Today est la même valeur que DateTime.Now, mais avec l'élément de temps défini sur minuit (00:00).

DateTime.Now.ToString("yyyyMMddHH") produit "2010032211"

DateTime.Today.ToString("yyyyMMddHH") produit "201032200" (pas partie de temps)

Dans le cas de DateTime.Today, vous verrez la même valeur, quel que soit le moment de la journée. C'est pourquoi vous n'obtenez que le premier fichier créé, car votre code ne crée actuellement qu'un seul nom de fichier chaque jour plutôt que chaque heure.

Remplacez DateTime.Today par DateTime.Now et votre problème est résolu.

Questions connexes