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

¿Fue útil?

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);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top