سؤال

هذا يعمل:

using (StreamWriter stw = new StreamWriter(Server.MapPath("\\xml\\file.xml")))
{
    stw.Write(xmlEncStr);
}

هذا يخلق ملف فارغ:

using (FileStream file = new FileStream(Server.MapPath("\\xml\\file.xml"), FileMode.CreateNew))
{
    using (StreamWriter sw = new StreamWriter(file))
    {
        sw.Write(xmlEncStr);
    }
}

حاولت اللعب مع مُنشئ Filestream وحاولت Flushing وما زلت أحصل على ملف بايت صفر. السلسلة التي أكتبها عبارة عن سلسلة ASCII مشفرة بسيطة BASE64 مع عدم وجود أحرف خاصة.

أعلم أنه يمكنني استخدام المثال الأول ، ولكن لماذا لا يعمل الثاني؟

تحديث

لم تكن هذه مشكلة في Filestream/StreamWriter - لقد كانت مشكلة تسمية متغيرة. لقد قمت بتصحيح الكود أعلاه ، لذا فإن كلا الإصدارين يعملان الآن. كان لدي في الأصل:

StreamWriter strw = new StreamWriter(file)
هل كانت مفيدة؟

المحلول

يمكنك تقصير الكود الخاص بك قليلا:

File.WriteAllText(Server.MapPath("\\xml\\file.xml"), xmlEncStr);

أيضا MapPath تقبل الطريقة المسار النسبي أو الظاهري وتحويله إلى المسار الفعلي المقابل على الخادم. \\xml\\file.xml هو غير ما سبق. ربما يجب أن يكون: ~/xml/file.xml.

نصائح أخرى

غير قابل للاستنساخ.

لا ينبغي أن تكون مشكلة ASP.NET ويجب أن يعمل النموذج الثاني (شريطة SW == strw ).

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

لكن @Darin Dimitrov يوفر بديلاً أفضل.

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