IoException على DataGridView الكتابة إلى ملف نصي C #
-
19-09-2019 - |
سؤال
صباح الخير جميعا،
أواجه بعض المشاكل مع طريقة في رمز 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)؛