سؤال

أنا أستخدم كائن StreamWriter للكتابة إلى أي ملف يتم إنشاؤه بواسطة المنشئ أو موجود بالفعل. إذا كان الملف موجودا ثم يلفظ البيانات. إذا لم يكن الأمر كذلك، فعليه إنشاء ملف ثم إلحاق البيانات أيضا. المشكلة هي أنه عند إنشاء الملف، يقوم منشئ StreamWeriter بإنشاء الملف ولكنه لا يكتب أي بيانات إلى الملف.

bool fileExists = File.Exists(filePath);

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    if (!fileExists)
    {
        writer.WriteLine("start");
    }

    writer.WriteLine("data");
}

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

هل كانت مفيدة؟

المحلول 2

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

نصائح أخرى

ركض الرمز غرامة على جهاز الكمبيوتر الخاص بي. هل يمكن أن نعرف ما يحتويه على FilePath المتغير؟ ربما كنت تبحث في الملف الخطأ ...

تحديث: مشكلة الشبكة؟ ربما شخص ما كان يفعل شيئا على الجانب الآخر من الشبكة. حاول الكتابة إلى ملف محلي. إذا كان يعمل، فحاول الكتابة إلى ملف بعيد على موقع آخر.

يمكن أن تجرب فتح الملف وظيفة. هناك مثال جيد في أسفل وقائمة filemodes.filemode.append هو ما تريد

عملت الكود الخاص بك بشكل صحيح بالنسبة لي ..

جرب بيان باستخدام

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    if (!fileExists)
    {
        writer.WriteLine("start");
    }

    writer.WriteLine("data");
    writer.Flush();
}

وبالمثل للآخرين الذين نشروا، فإن التعليمات البرمجية الخاصة بك تعمل بشكل جيد على جهاز الكمبيوتر الخاص بي.

قد يساعدك في كسر الرمز الخاص بك في جزأين، الجزء الأول الذي يكتب رأسه إذا لم يكن الملف موجودا بالفعل، ثم يقوم الجزء الثاني في كتابة البيانات:

try
{
    using (FileStream fs = new FileStream(filePath, FileMode.CreateNew))
    {
        using (StreamWriter sw = new StreamWriter(fs))
        {
            sw.WriteLine("start");
        }
    }
}
catch (IOException ex)
{
}

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    writer.WriteLine("data");
}

يعمل الرمز الخاص بك بالنسبة لي، بعد 3 أشواط

بدء بيانات بيانات البيانات

هل أنت متأكد من أنك لا تحاول الوصول إلى ملف الوصول، أي لسبب ما لا يمكنك الكتابة إليه؟ أيضا، فقط للتأكد، المكان writer.Close() قبل التخلص منها، على الرغم من Dispose() يجب أن تدفع البيانات. إذا لم يساعد هذا، فحاول إنشاء الملف يدويا باستخدام File.Create() مع الأعلام المناسبة.

/ / تحرير: لقد جربت هذا الرمز على جهازي:

Public غير آمنة ثابت الفراغ الرئيسي () {string filepath = @ " comp-name  documents  foo.txt"؛ FileStream FS = NULL؛ إذا (! File.exists (FilePath)) FS = FILE.CREATE (FIAEPATH)؛ Else FS = FILE.OPEN (FILEPATH، FILEMODE.APPEND)؛ باستخدام (StreamWriter Writer = StreamWriter الجديد (FS)) {Writer.Writeline ("البيانات")؛ }}

ويتم تشغيله بسلاسة، يمكن أن تجرب هذا واحد؟

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