IOException en DataGridView escrito al texto del archivo de C #
-
19-09-2019 - |
Pregunta
Buenos días todos,
Estoy teniendo algunos problemas con un método en mi código C # que debería permitir un DataGridView para ser guardado en un archivo .txt.
El código es la siguiente:
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();
}
La siguiente línea está devolviendo el error:
TextWriter toText = new StreamWriter(toOutFile);
IOException fue controlada. El proceso no tiene acceso al archivo 'C: \ hola.txt'. Porque está siendo utilizado por otro proceso
No estoy del todo seguro de cuál es el problema, pero sugeriría que hay conflictos entre FileStream y TextWriter.
¿Alguien puede arrojar alguna luz sobre esto? Saludos
Solución
Está abriendo dos veces; perder todas las cosas toFile
completamente , y el uso de using
alrededor 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());
}
}
también; es lo que realmente quiere decir WriteLine(... + "\n\n")
?
Otros consejos
Cuando se está usando la línea
TextWriter toText = new StreamWriter(toOutFile);
No se requiere la siguiente línea, porque StreamWriter (rutaArchivo cadena) constructor creará un archivo si no existe.
FileStream toFile = new FileStream(toOutFile, FileMode.Create);
Y Marc es correcto, ya tiene archivo abierto una vez en otra variable de instancia, usted no puede abrir de nuevo.
He supervisado que se abre el escritor con el nombre de archivo. Pense que lo habías hecho TextWriter ToText = new StreamWriter (TOFILE);