none
Guardar/leer datos de un fichero

    Question

  • Hola
    Estoy realizando un programilla en el cual tengo una array de enteros (de 4 bits cada elemento) con un tamaño del array =[I]LONGITUD.[/I] 
    Mi intención es al pulsar un boton guardar ese array en un fichero (en principio txt aunque esto es lo menos importante) y también al pulsar otro boton rellenar el array a partir de la información obtenida del fichero.
    Estoy utilizando savefiledialog y openfiledialog y estoy mostrando la información en un richTextBox. Esto funciona Ok
    Sin embargo no se me ocurre la forma de trabajar con arrays en lugar de con el richTextBox.
    Me imagino que habría que realizar una conversión de int a string para guardar y al reves para cargar. también tendre que intercalar un caracter como "," ó "." para separar los diferentes elementos en el fichero
    Si que conozco algo de c pero en esto de c# soy novato así que cualquier ayuda será bien recibida, os dejo el código de los botones por si podeis ayudarme
    private void guardarArchivoTexto_Click(object sender, EventArgs e)
      {
       saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
    
       if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK
        && saveFileDialog1.FileName.Length > 0)
       {
    
        richTextBox1.SaveFile(saveFileDialog1.FileName,
         RichTextBoxStreamType.PlainText);
       }
      }
    
    private void CargarSi_Click(object sender, EventArgs e)
      {
       openFileDialog1.Filter = "txt files (*.txt)|*.txt";
       openFileDialog1.FileName = "";
    
       if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK
        && openFileDialog1.FileName.Length > 0)
       {
    
        richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
        this.label1.Text = openFileDialog1.FileName;
       }
    
    P.D: Tengo otra duda muy de novato y seguramente muy facil de resolver.
    Utilizo VisualC#2008 express
    Quiero modificar el tamaño de un form2 desde form1 lo estoy intentando hacer según la información de:
    Form2.Size = new System.Drawing.Size(100, 100);
    
    sin embargo al compilar me da este error
    Error 1 An object reference is required for the non-static field, method, or property 'System.Windows.Forms.Form.Size.get' E:\Documents and Settings\Admin\Mis documentos\Visual Studio 2008\Projects\Huellaultima\Huellaultima\Form1.cs 26 13 Huellaultima
    La línea de error es la de Form2.size ...
    Esto lo hago porque quiero modificar el tamaño del form2 a partir de una variable tomada en form1.
    Gracias de antemano
    Un saludo

    Saturday, June 11, 2011 10:08 AM

Answers

  • Si tienes algo como un int[] con tus numeros, puedes usar el metodo File.WriteAllLines para escribir el fichero, solo tienes que transformar el int[] en un string[], y lo puedes hacer con algo como:

    File.WriteAllLines(nombreFichero, numeros.Select(n => n.ToString()));

    Necesitas tener el using de System.Linq y listo.

    Sobre el error 2, necesitas modificar un objeto, Form2 parece el nombre de una Clase.


    Vicente Cartas Espinel - MVP XNA/DirectX

    Twitter - VicenteCartas

    Blog about C# and XNA Development

    Blog about Role Playing Games

    Saturday, June 11, 2011 12:18 PM
  • Quiero modificar el tamaño de un form2 desde form1 Form2.Size = new System.Drawing.Size(100, 100);

    sin embargo al compilar me da este error
    Error 1 An object reference is required for the non-static field, method, or property


    El mensaje de error te dice que estás usando la clase en lugar de la instancia del formulario. Sólo puedes cambiar el tamaño de una instancia, no de la propia clase. Por ejemplo, si abres el formulario así:

    Form2 f = new Form2();
    f.Show();
    

    entonces a quien tienes que cambiarle el Size es a f, no a Form2.

    Si vienes de programar en VB6, puede ser que te surja esta duda porque en VB6 el compilador hacía automáticamente un "Dim Form2 As New Form2()", con lo que "Form2" era a la vez el nombre de la instancia y el nombre de la clase. En .Net eso no ocurre, no se genera de forma automática una instancia con el mismo nombre de la clase, y tienes que usar el nombre que tú pusiste cuando creaste la instancia ("f" en el ejemplo anterior).

     

    Saturday, June 11, 2011 8:22 PM

All replies

  • Si tienes algo como un int[] con tus numeros, puedes usar el metodo File.WriteAllLines para escribir el fichero, solo tienes que transformar el int[] en un string[], y lo puedes hacer con algo como:

    File.WriteAllLines(nombreFichero, numeros.Select(n => n.ToString()));

    Necesitas tener el using de System.Linq y listo.

    Sobre el error 2, necesitas modificar un objeto, Form2 parece el nombre de una Clase.


    Vicente Cartas Espinel - MVP XNA/DirectX

    Twitter - VicenteCartas

    Blog about C# and XNA Development

    Blog about Role Playing Games

    Saturday, June 11, 2011 12:18 PM
  • Quiero modificar el tamaño de un form2 desde form1 Form2.Size = new System.Drawing.Size(100, 100);

    sin embargo al compilar me da este error
    Error 1 An object reference is required for the non-static field, method, or property


    El mensaje de error te dice que estás usando la clase en lugar de la instancia del formulario. Sólo puedes cambiar el tamaño de una instancia, no de la propia clase. Por ejemplo, si abres el formulario así:

    Form2 f = new Form2();
    f.Show();
    

    entonces a quien tienes que cambiarle el Size es a f, no a Form2.

    Si vienes de programar en VB6, puede ser que te surja esta duda porque en VB6 el compilador hacía automáticamente un "Dim Form2 As New Form2()", con lo que "Form2" era a la vez el nombre de la instancia y el nombre de la clase. En .Net eso no ocurre, no se genera de forma automática una instancia con el mismo nombre de la clase, y tienes que usar el nombre que tú pusiste cuando creaste la instancia ("f" en el ejemplo anterior).

     

    Saturday, June 11, 2011 8:22 PM
  • Gracias el asunto del formulario ya está resuelto como has explicado

    Un saludo


    Tuesday, June 14, 2011 1:12 PM