elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  pregunta sobre ficheros en c# windows forms
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: pregunta sobre ficheros en c# windows forms  (Leído 943 veces)
rulovive

Desconectado Desconectado

Mensajes: 42



Ver Perfil WWW
pregunta sobre ficheros en c# windows forms
« en: 20 Enero 2018, 00:17 »

maldita duda.... me podrian explicar porque con el primer codigo si pude hacer la apertura, escritura y cierre de un fichero en cada pulsacion del boton, mientras que en el sgundo (habia optado por usar el segundo ya que vi en algunos foros que definir las condiciones de la manipulacion del fichero con filestream era mas "limpio y buena practica"), no me dejaba hacerlo?
otra duda.- porque en el codigo no necesite hacer esto: escribir = new StreamWriter(condiciones);?


Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {

       
        StreamWriter escribir;
       
       
       
        public Form1()
        {
           
            InitializeComponent();


           
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
             
           
        }

       

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToString();


        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            escribir= File.AppendText("C:\\Users\\Constructora\\Desktop\\ANOTACIONES.txt");
            escribir.WriteLine(label1.Text);
            escribir.Close();
         

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

        }
    }
}


esto es lo que pude hacer para abrir, escribir, cerrar y volver a abrr un fichero en cada pulsacion del boton... lo que no entiendo es porque aqui no tuve que usar lo siguiente:

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {

        FileStream condiciones = new FileStream("C:\\Users\\Constructora\\Desktop\\ANOTACIONES.txt", FileMode.Open, FileAccess.Write);
        StreamWriter escribir;
       
       
       
        public Form1()
        {
           
            InitializeComponent();


           
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
               
           
        }

       

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToString();


        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            escribir = new StreamWriter(condiciones);
            escribir.WriteLine(label1.Text);
            escribir.Close();
           
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

        }
    }
}


« Última modificación: 20 Enero 2018, 00:35 por rulovive » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: pregunta sobre ficheros en c# windows forms
« Respuesta #1 en: 20 Enero 2018, 01:02 »

El problema es que cuando llamas al método 'escribir.Close()', el stream subyacente también se cierra, es decir, internamente 'escribir.Close()' llama a 'condiciones.Close()', y por eso al intentar acceder al stream 'condiciones' por segunda vez no puedes hacer nada ya que el stream lo cerraste.

En general la forma en la que estás haciendo las cosas es poco o nada conveniente, declarar una variable e inicializarla en la misma sentencia creando una instancia, en este caso de la clase FileSream, hacer eso a nivel de clase es un mal hábito de programación, es algo que puede pasar factura en general. Al constructor le estás pasando el argumento FileMode.Open, así que la primera vez que se inicie tu aplicación dará un error al intentar inicializar el Form... a menos que exista el archivo.

Por si no queda claro lo que estoy intentando explicar, a esto le sobra todo lo que está a la derecha del símbolo "=":
Citar
Código
  1. FileStream condiciones = new FileStream("C:\\Users\\Constructora\\Desktop\\ANOTACIONES.txt", FileMode.Open, FileAccess.Write);
Entonces, quedaría así:
Código
  1. FileStream condiciones;
...y la inicializarías más tarde con una instancia de la clase FileStream.

De todas formas no necesitas declarar ninguna variable/objeto, basta con que hagas esto en el controlador de evento de tu botón:
Código
  1. using (FileStream fs = new FileStream(@".\ANOTACIONES.txt", FileMode.Append, FileAccess.Write, FileShare.Read)) {
  2.    using (StreamWriter sw = new StreamWriter(fs)) {
  3.        sw.WriteLine(label1.Text);
  4.    }
  5. }

...pero tampoco necesitas en absoluto hacerlo así, para lo poco que quieres hacer te basta y te sobra con realizar una simple llamada al método System.IO.File.AppendAllText()
Código
  1. File.AppendAllText(@".\ANOTACIONES.txt", label1.Text, Encoding.Default);

Saludos.


« Última modificación: 20 Enero 2018, 02:56 por Eleкtro » En línea


rulovive

Desconectado Desconectado

Mensajes: 42



Ver Perfil WWW
Re: pregunta sobre ficheros en c# windows forms
« Respuesta #2 en: 20 Enero 2018, 18:24 »

sabes que ya dominaba c++ pero c# la verdad es... apasionante, apenas empiezo a aprender pero me ha servido de mucho t explicacion. moraleja: darse un baño de metodos, propiedades y clases en c#... xD gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta sobre serial de oro windows XP
Windows
hunter18 4 10,271 Último mensaje 14 Agosto 2010, 00:25
por simorg
trabajando con ficheros una pregunta
Programación C/C++
anonimo12121 2 536 Último mensaje 20 Febrero 2013, 14:06
por anonimo12121
Pregunta sobre Windows 8 y partición GPT « 1 2 »
Windows
lab004 13 29,553 Último mensaje 21 Mayo 2014, 11:59
por benja999
Pregunta sobre APIs en Windows.
Programación C/C++
EzianGES 8 1,570 Último mensaje 27 Febrero 2014, 18:05
por Vaagish
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines