سؤال

صباح الخير جميعا،

أواجه بعض المشاكل مع طريقة في رمز C # الخاص بي الذي يجب أن يتم حفظ DataGridView ليتم حفظ ملف .txt.

الرمز هو على النحو التالي:

private void saveToTxt_Btn_Click(object sender, EventArgs e)
    {
        filenameText.Text = serviceDataGrid.Rows.Count.ToString();
        //string toOutFile = @"C:\" + filenameText.Text+".txt";
        string toOutFile = @"C:\hello.txt";

        FileStream toFile = new FileStream(toOutFile, FileMode.Create);

        TextWriter toText = new StreamWriter(toOutFile);

        int count = serviceDataGrid.Rows.Count;

        toText.WriteLine("\t\t" + filenameText.Text);
        toText.WriteLine("\t\t" + directoryText.Text+"\n\n");

        for (int row = 0; row < count-1; row++)
        {
            toText.WriteLine(serviceDataGrid.Rows[row].Cells[0].Value.ToString());
        }
        toText.Close();
        toFile.Close();
    }

السطر التالي يعيد الخطأ:

TextWriter toText = new StreamWriter(toOutFile);

كان IoException غير معالج.لا يمكن للعملية الوصول إلى الملف 'C: Hello.txt' لأنه يتم استخدامه بواسطة عملية أخرى.

أنا لست متأكدا تماما ما هي المشكلة، لكنها ستؤدي إلى وجود صراعات بين FileStream وكاتب الأساس.

أي شخص يمكن أن يلقي أي ضوء على ذلك؟ يعتبر

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

المحلول

أنت تفتح ذلك مرتين؛ تفقد كل شيء toFile أمور بالكامل, واستخدام using حول toText:

    using(TextWriter toText = File.CreateText(toOutFile))
    {
        toText.WriteLine("\t\t" + filenameText.Text);
        toText.WriteLine("\t\t" + directoryText.Text+"\n\n");

        foreach(DataGridViewRow row in serviceDataGrid.Rows)
        {
            toText.WriteLine(row.Cells[0].Value.ToString());
        }
    }

أيضا؛ هل تعني حقا WriteLine(... + "\n\n") ?

نصائح أخرى

عندما تستخدم خط

TextWriter toText = new StreamWriter(toOutFile);

السطر التالي غير مطلوب، نظرا لأن منشئ StreamWriter (سلسلة FilePath) سيقوم بإنشاء ملف إذا لم يكن موجودا.

FileStream toFile = new FileStream(toOutFile, FileMode.Create);

ومارك هو الصحيح، لديك بالفعل فتح ملف مرة واحدة في متغير مثيل آخر، لا يمكنك فتح مرة أخرى.

لقد أشرفت أنك تفتح الكاتب باسم الملف. اعتقدت أنك فعلت TextWriter Tootext = StreamWriter الجديد (TOFILE)؛

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