Guardar y leer archivo txt

  • Autor Autor Meta
  • Fecha de inicio Fecha de inicio
M

Meta

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!

Usando C# en modo consola, se puede señalar con las flechas del teclado seleccionar alguna opción con esto >. Solo debe estar marcado con una x.

La idea es, al ejecutar el programa, si no encuentra el archivo.txt, lo cree y escribe la opción marcada con la x.

Al volver a ejecutar el programa, me indica la opción marcada que leyó en el archivo.txt.

Código que he hecho hasta ahora pero no lee, si lo crea es este:
 
Tu codigo esta bien, solo necesita unos cmabios.

Prueba haciendo estos ajustes colega.

Tienes un problema potencial de índice fuera de límites en tu menu. Tu variable SELECCION_OPCIONES_TOTALES está establecida en 3, pero sus opciones de menu incluyen en realidad 4 opciones (0 a 3).

Asi que cambia esto:
if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)

Por esto:
if (indiceSeleccionado > 3)

Asegurate de que las llamadas de File.WriteAllText se utilizan correctamente. Es posible que estes deseando comprobar si el archivo se puede crear o si tiene permisos para escribir en él.

C#:
if (tecla == ConsoleKey.Enter)
{
    switch (indiceSeleccionado)
    {
        case 0:
            opA = "x"; opB = " "; opC = " ";
            break;

        case 1:
            opA = " "; opB = "x"; opC = " ";
            break;

        case 2:
            opA = " "; opB = " "; opC = "x";
            break;

        case 3:
            indiceSeleccionado = 0; // Restaurar índice antes de salir.
            salir = true; // Salir.
            break;

        default:
            Console.Write("Fuera de rango. ");
            break;
    }
    // Guardar en archivo solo después de actualizar la opción seleccionada
    File.WriteAllText("Archivo.txt", opA + opB + opC);
}
 
Buenas colega.

Me sale esto.

Al leer, guardar parece que guarda bien, pero al leer como que no.
 

Adjuntos

  • Opciones04.webp
    6,4 KB · Visitas: 3
Ya me funciona, se hace así:

Dejo el código por si alguien lo necesita o solo quiere curiosear hasta en el alma. Xddddddd.
C#:
using System;
using System.IO;

namespace Pruebas_Opciones_Consola_02
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region Configuración ventana.
            // Título de la ventana.
            Console.Title = "Opciones";

            // Tamaño de la ventana, x, y o, ancho y alto.
            const byte ANCHO_X = 20, ALTO_Y = 5;
            Console.SetWindowSize(ANCHO_X, ALTO_Y);

            // Quitar scroll laterales. Derecho y abajo.
            Console.SetBufferSize(ANCHO_X, ALTO_Y);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Yellow;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Black;

            // Limpiar pantalla y dejarlo todo en color de fondo.
            Console.Clear();

            // Visible el cursor. // No! Así lo haces invisible.
            Console.CursorVisible = false;
            #endregion

            string[] opciones =
{
                    "    ** TÍTULO **    ",    // Posición 0.
                    "  ( ) Opción A      ",    // 1
                    "  ( ) Opción B      ",    // 2
                    "  ( ) Opción C      ",    // 3
                    "  SALIR             ",    // 4
                    ">",                       // 5
                    "x",                       // 6
                    " ",                       // 7
                    "                    "     // 8
                };
            string opA = "x";
            string opB = " ";
            string opC = " ";

            Menu();

            #region Opociones, selecciones y guardar archivo .txt
            void OpcionesA()
            {
                Console.SetCursorPosition(0, 0);
                Console.Write(opciones[0]);       //    ** TÍTULO **   
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[1]);       //   ( ) Opción A
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[2]);       //   ( ) Opción B
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[3]);       //   ( ) Opción C
            }

            void OpcionesB()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[4]);       //   SALIR
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[8]);       // 
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[8]);       //
            }

            void SelectorA()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[5]);       // >
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[7]);
            }

            void SelectorB()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[5]);       // >
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[7]);
            }

            void SelectorC()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[5]);        // >
            }
            #endregion

            void Menu()
            {
                sbyte indiceSeleccionado = 0;                // Índice seleccionado de cada opción del menú.
                bool salir = false;                          // Para salir del menú principal al INICIO.
                sbyte SELECCION_OPCIONES_TOTALES = 3;        // Total de opciones para seleccionar y fija.

                // Capturar tecla para luego validar.
                ConsoleKey tecla;

                // Crear archivo y guarda el * seleccioinado en él.
                if (File.Exists("Archivo.txt"))
                {
                    // Leer los datos separados
                    string[] result = File.ReadAllText("Archivo.txt").Split(new char[] { ',' });
                    opA = result[0];
                    opB = result[1];
                    opC = result[2];
                }

                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.

                    switch (indiceSeleccionado)
                    {
                        case 0:
                            OpcionesA();
                            SelectorA();
                            Console.SetCursorPosition(3, 1);
                            Console.Write(opA);
                            Console.SetCursorPosition(3, 2);
                            Console.Write(opB);
                            Console.SetCursorPosition(3, 3);
                            Console.Write(opC);
                            break;

                        case 1:
                            OpcionesA();
                            SelectorB();
                            Console.SetCursorPosition(3, 1);
                            Console.Write(opA);
                            Console.SetCursorPosition(3, 2);
                            Console.Write(opB);
                            Console.SetCursorPosition(3, 3);
                            Console.Write(opC);
                            break;

                        case 2:
                            OpcionesA();
                            SelectorC();
                            Console.SetCursorPosition(3, 1);
                            Console.Write(opA);
                            Console.SetCursorPosition(3, 2);
                            Console.Write(opB);
                            Console.SetCursorPosition(3, 3);
                            Console.Write(opC);
                            break;

                        case 3:
                            OpcionesB();
                            Console.SetCursorPosition(0, 1);
                            Console.Write(opciones[5]);       // >
                            break;
                        default:
                            Console.Write("Fuera de rango.     ");
                            break;
                    }

                    // Fin de pintar el menú principal.
                    //******************************************************************

                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;

                    // Validar el tipo de tecla.
                    if (tecla == ConsoleKey.Enter)
                    {
                        switch (indiceSeleccionado)
                        {
                            case 0:
                                opA = "x"; opB = " "; opC = " ";
                                break;

                            case 1:
                                opA = " "; opB = "x"; opC = " ";
                                break;

                            case 2:
                                opA = " "; opB = " "; opC = "x";
                                break;

                            case 3:
                                indiceSeleccionado = 0; // Restaurar índice antes de salir.
                                salir = true;           // Salir.
                                break;

                            default:
                                Console.Write("Fuera de rango.     ");
                                break;
                        }
                        // Guardar en archivo solo después de actualizar la opción seleccionada.
                        // Guardar los datos con separador.
                        File.WriteAllText("Archivo.txt", string.Join(",", new string[] { opA, opB, opC }));
                    }

                    // ¿Has pulsado tecla flecha Abajo?
                    if (tecla == ConsoleKey.DownArrow)
                    {
                        indiceSeleccionado++;
                    }

                    // Entonces si pulsas tecla flecha Arriba.
                    if (tecla == ConsoleKey.UpArrow)
                    {
                        indiceSeleccionado--;
                    }

                    // Si está en la última opción, salta a la primera.
                    if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
                    {
                        indiceSeleccionado = 0;
                    }

                    // Si está en la primera posición, salta a la última.
                    if (indiceSeleccionado < 0)
                    {
                        indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
                    }

                    // Uso la tecla escape como salida.
                } while (!salir);
            }
        }
    }
}