Programación de Archivos en C#

Iniciado por Castiel, 25 Enero 2015, 03:48 AM

0 Miembros y 1 Visitante están viendo este tema.

Castiel

Hola conocedores, alguien puede socorrer a su servidor tengo un enunciado que resolver, pero no logro correrlo, me podrían comentar en que estoy bien y en que mal, les proporciono el enunciado y mi avance del código.

Lo que se pide es solicitar al usuario que capture frases y cada vez que presione la tecla Intro se almacene la línea o frases capturadas en un archivo llamado "frases.txt".
Deja de solicitar la captura de elementos cuando presione la tecla Intro sin teclear nada.
Muestra el contenido del archivo al finalizar la captura.

Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine("Escriba palabras que se guardaran en un archivo llamado <<frases.txt>>");

           //como puedo llamar aqui a las funciones Write y despues a Read, si es que Write termino
           //null, para que se pueda ejecutar enseguida Read?... no se si esta bien mi codigo



           Console.WriteLine("Oprima una tecla para continuar...");
           System.Console.ReadKey();
       }
   }


   public class ListaEnlazada //inicio de lista enlazada
   {

       public void Write()//inicio de write
       {
           StreamWriter fichero;

           string linea;
           string ruta = @"C:\Windows\Temp\frases.txt";
           File.CreateText(ruta);
           fichero = File.CreateText(ruta);
           linea = Console.ReadLine();


           do
           {            
               linea = Console.ReadLine();
               fichero.WriteLine(linea);
           }
           while (linea == null) ;


           fichero.Close();
       }//fin de write

   

       public void Read()//inicio de read
       {
           StreamReader fichero;
           string line;
           string ruta = @"C:\Windows\Temp\frases.txt";
           fichero = File.OpenText(ruta);

           do
           {
               line = fichero.ReadLine();
               if (line != null)
                   Console.WriteLine(line);
           } while (line != null);


           fichero.Close();
       }//fin de read


       }//fin de lista enlazada
 

}


Espero contar con su apoyo saludos.

Eleкtro

#1
En el método Read no deberías comprobar si la linea está vacía, ya que el método Write finaliza al detectar una linea vacía.

He hecho otras modificaciones:

VB.Net:
Código (vbnet) [Seleccionar]
Module Module1

   ''' <summary>
   ''' Defines the entry point of the application.
   ''' </summary>
   Public Sub Main()

       ListaEnlazada.Write()
       ListaEnlazada.Read()
       ListaEnlazada.Wait()

   End Sub

End Module

+
Código (vbnet) [Seleccionar]
Imports System.IO
Imports System.Text

Public NotInheritable Class ListaEnlazada

   Shared ReadOnly filepath As String = Path.Combine(Path.GetTempPath, "frases.txt")

   Public Shared Sub Write()

       Console.WriteLine(String.Format("Escriba palabras que se guardaran en un archivo llamado '{0}'",
                                       Path.GetFileName(filepath)))

       Dim inputText As String

       Using sw As New StreamWriter(filepath, append:=False, encoding:=Encoding.Default)

           inputText = Console.ReadLine()

           Do Until String.IsNullOrEmpty(inputText)
               sw.WriteLine(inputText)
               inputText = Console.ReadLine()
           Loop

       End Using

   End Sub

   Public Shared Sub Read()

       ' NOTA:
       ' Puedes simplificar todo este bloque en una sola instrucción:
       ' Console.Write(File.ReadAllText(filepath, encoding:=Encoding.Default))

       Using sr As New StreamReader(filepath, encoding:=Encoding.Default)

           Do Until sr.EndOfStream
               Console.WriteLine(sr.ReadLine())
           Loop

       End Using

   End Sub

   Public Shared Sub Wait()

       Console.WriteLine("Oprima una tecla para continuar...")
       Console.ReadKey()

   End Sub

End Class


C#:
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
  class Program
  {
      /// <summary>
      /// Defines the entry point of the application.
      /// </summary>
      static void Main(string[] args)
      {
       ListaEnlazada.Write();
       ListaEnlazada.Read();
       ListaEnlazada.Wait();
      }
  }

}

+
Código (csharp) [Seleccionar]
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;

public sealed class ListaEnlazada
{
static readonly string filepath = Path.Combine(Path.GetTempPath, "frases.txt");

public static void Write()
{
Console.WriteLine(string.Format("Escriba palabras que se guardaran en un archivo llamado '{0}'", Path.GetFileName(filepath)));

string inputText = null;

using (StreamWriter sw = new StreamWriter(filepath, append: false, encoding: Encoding.Default)) {

inputText = Console.ReadLine();

while (!(string.IsNullOrEmpty(inputText))) {
sw.WriteLine(inputText);
inputText = Console.ReadLine();
}
}
}

public static void Read()
{
// NOTA:
// Puedes simplificar todo este bloque en una sola instrucción:
// Console.Write(File.ReadAllText(filepath, encoding: Encoding.Default));

using (StreamReader sr = new StreamReader(filepath, encoding: Encoding.Default)) {

while (!(sr.EndOfStream)) {
Console.WriteLine(sr.ReadLine());
}
}
}

public static void Wait()
{
Console.WriteLine("Oprima una tecla para continuar...");
Console.ReadKey();
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Saludos








Castiel

Muchas gracias por tu apoyo Elektro, que estes bien y saludos cordiales. ;-)