لا يقوم StreamWriter بإنشاء ملف جديد
-
21-09-2019 - |
سؤال
أحاول إنشاء ملف سجل جديد كل ساعة مع الكود التالي الذي يعمل على خادم. يتم إنشاء ملف السجل الأول لهذا اليوم وكتابته على غرامة ، ولكن لا يتم إنشاء ملفات تسجيل أخرى في ذلك اليوم. أي أفكار ما قد يحدث خطأ؟ لا يتم إلقاء استثناءات أيضًا.
private void LogMessage(Message msg)
{
string name = _logDirectory + DateTime.Today.ToString("yyyyMMddHH") + ".txt";
using (StreamWriter sw = File.AppendText(name))
{
sw.WriteLine(msg.ToString());
}
}
المحلول
استخدام DateTime.Today
الأصفار الجزء الوقت. يجب أن تستخدم DateTime.Now
أو DateTime.UtcNow
بحيث عاد DateTime
يحتوي على ساعة مختلفة عن الصفر.
نصائح أخرى
اليوم يعطي التاريخ الحالي فقط. لذلك HH هو دائما "00". جرب DateTime.now.toString ("Yyyymmddhh") بدلاً من ذلك.
السبب في أنك تحصل على ملف واحد فقط بسبب استخدامك لـ DateTime.Today
بدلاً من DateTime.Now
. DateTime.Today
هي نفس قيمة DateTime.Now
, ، ولكن مع عنصر الوقت المحدد حتى منتصف الليل (00:00).
DateTime.Now.ToString("yyyyMMddHH")
ينتج "2010032211"
DateTime.Today.ToString("yyyyMMddHH")
ينتج "201032200" (لا يوجد جزء من وقت)
في حالة DateTime.Today
, ، سترى نفس القيمة ، بغض النظر عن الوقت من اليوم. هذا هو السبب في أنك تحصل على الملف الأول فقط ، حيث أن الكود الخاص بك سيقوم حاليًا بإنشاء اسم ملف فريد فقط كل يوم ، بدلاً من كل ساعة.
يتغيرون DateTime.Today
ل DateTime.Now
ويتم حل مشكلتك.
يبدو أن مسارك كان غير صحيح بسبب استخدام DateTime.Today. حاول استخدام path.combine في الميزة لمنع أخطاء أخرى مثل "/" إضافة إلخ MSDN