سؤال

أحاول إنشاء ملف سجل جديد كل ساعة مع الكود التالي الذي يعمل على خادم. يتم إنشاء ملف السجل الأول لهذا اليوم وكتابته على غرامة ، ولكن لا يتم إنشاء ملفات تسجيل أخرى في ذلك اليوم. أي أفكار ما قد يحدث خطأ؟ لا يتم إلقاء استثناءات أيضًا.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top