none
Crear archivo de texto desde cualquier parte RRS feed

  • Pregunta

  • Hola:

    En este tema ya puedo crear un archivo de texto txt con contenido. Su código fuente es este.

    using System;
    using System.IO;
    
    namespace Crear_txt_Consola_01_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Crear archivo txt Consola C#";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X. Ancho.
                Console.WindowHeight = 18; // Y. Alto.
    
                string strFileFullName = @"Hola.txt";
    
                // Si no existe el archivo.
                if (!File.Exists(strFileFullName))
                    File.WriteAllText(strFileFullName, "Hola Mundo.");
                else // Si existe...
                {
                    // Codigo a ejecutar si existe...
                    Console.WriteLine("El archivo existe, así que no se sustituirá.");
    
                    // Pulse cualquier tecla para salir.
                    Console.ReadKey();
                }
            }
        }
    }

    Si entrego el ejecutable, el usuario lo ejecuta desde el Pendrive por poner un ejemplo, o cualquier otro directorio o ubicación. El archivo a crear, quiero que se cree, siempre en el escritorio, llamado Hola.txt.

    Si el usuario lo ejecuta desde el escritorio, que también aparezca.

    Esto es algo que llevo traquiniando hace horas y horas. No debo saber la carpeta o nombre del usuario del que lo ejecuta, simplemente quiero modificar el programa, que sea capaz de encontrar el escritorio del usuario y que tenga escrito esto, Hola.txt, en su interior escrito Hola mundo.

    ¿Es posible hacerlo?

    Saludos.


    http://electronica-pic.blogspot.com

    sábado, 10 de marzo de 2018 14:08

Respuestas

  • Primero debe supuestamente elegir la variable ruta para indicar la ruta, en este caso en el escritorio.

    Después la variable strFileFullName para crear el archivo de texto en este caso llamado Hola.txt.

    He dado vueltas y no se como encajarlo.

    Creo que te estás complicando innecesariamente. Si tienes la ruta y el fichero, no hay más que juntar la ruta con el fichero (poniendo la "\" entre medias igual que si fueses a escribir la ruta a mano en el explorador de Windows). Es una simple concatenación de strings:

    string strFileName = @"Hola.txt"; // Nombre del archivo.
    string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
    string ficheroAGrabar = ruta + @"\" + strFileName;
    
    ...
    
    File.WriteAllText(ficheroAGrabar, "Hola Mundo.");

    Editado: Y si quieres algo más elegante, puedes usar Path.Combine, que automaticamente concatena la ruta con el fichero y añade la barra intermedia en caso de que no exista ya esa barra en la ruta:

    string strFileName = @"Hola.txt"; // Nombre del archivo.
    string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
    string ficheroAGrabar = Payh.Combine(ruta, strFileName);
    
    ...
    
    File.WriteAllText(ficheroAGrabar, "Hola Mundo.");





    domingo, 11 de marzo de 2018 10:52
    Moderador
  • No es: [...] strFileName [...] strFileFullName.

    No, no, fíjate bien en el ejemplo completo que yo te puse. Donde tú tenías el nombre de fichero cargado en una variable que tú llamaste strFileFullName, yo te lo cambié y te lo metí en una variable que se llamaba strFileName. Teniendo el fichero en esa variable (como lo tenia mi ejemplo) era correcto hacer el Path.Combine con el mismo nombre de variable.

    La razón por la que te cambié el nombre que tenías puesto era para evitar confusiones, ya que habitualmente cuando se habla de un "Full Name" se refiere a que ya tiene incluida la ruta, mientras que solo se pone "Name" cuando únicamente tiene el nombre de fichero, sin ruta. Dado que tu variable solo tenía el nombre, y no la ruta, por eso la llamé "Name" en lugar de "FUll Name".

    • Marcado como respuesta Metaconta lunes, 12 de marzo de 2018 6:33
    domingo, 11 de marzo de 2018 14:54
    Moderador

Todas las respuestas

  • Para encontrar la ruta del escritorio del usuario puedes usar esto:

    string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

    A esa ruta le añades el fichero que quieres grabar, y listo, con eso aparece en el escritorio del usuario.

    sábado, 10 de marzo de 2018 16:22
    Moderador
  • Buenas:

    Estuve mirando tu código y lo necontré aquí.

    Enumeración Environment.SpecialFolder.

    ¿Cómo hago para que se m pasa al escritorio?

    Puedo ver el nombre como dice el enlace, pero no se que hacer para que se guarde en el escritorio. Siempre se me queda al lado del ejecutable.

    Saludos.


    http://electronica-pic.blogspot.com

    domingo, 11 de marzo de 2018 8:52
  • ¿Cómo hago para que se m pasa al escritorio? Siempre se me queda al lado del ejecutable.

    Casi seguro que eso se debe a que no has llamado a Environment.GetFolderPath además de llamar a Environment.SpecialFolder.Desktop.

    Si es necesario, ponnos aquí cómo te ha quedado el código que estás usando para grabar, y miramos a ver qué es lo que está mal.


    domingo, 11 de marzo de 2018 9:00
    Moderador
  • Buenas:

    No se cuajarlo. Estoy peleando con estas dos variables.

                string strFileFullName = @"Hola.txt";
                string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

    Primero debe supuestamente elegir la variable ruta para indicar la ruta, en este caso en el escritorio.

    Después la variable strFileFullName para crear el archivo de texto en este caso llamado Hola.txt.

    He dado vueltas y no se como encajarlo.

    using System;
    using System.IO; // No olvidar.
    
    namespace Crear_txt_Consola_02_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Crear archivo txt Consola 02 C#";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X. Ancho.
                Console.WindowHeight = 18; // Y. Alto.
    
                // Variables.
                string strFileFullName = @"Hola.txt"; // Nombre del archivo.
                string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
    
                // Muestra la ruta en pantalla.
                Console.WriteLine(ruta); // C:\Users\Usuario\Desktop
    
                // Si no existe el archivo.
                if (!File.Exists(strFileFullName))
                {
                    // Crea el contenido al archivo de texto.
                    File.WriteAllText(strFileFullName, "Hola Mundo.");
                }
    
                else // Si existe...
                {
                    // Codigo a ejecutar si existe...
                    Console.WriteLine("El archivo existe, así que no se sustituirá.");
    
                    // Pulse cualquier tecla para salir.
                    Console.ReadKey();
                }
            }
        }
    }
    

    Intenté hacer disparate como esto.

    Environment.GetFolderPath(Environment.SpecialFolder.Desktop(File.WriteAllText(strFileFullName, "Hola Mundo.")))


    Saludos.





    • Editado Metaconta domingo, 11 de marzo de 2018 10:44
    domingo, 11 de marzo de 2018 9:44
  • Primero debe supuestamente elegir la variable ruta para indicar la ruta, en este caso en el escritorio.

    Después la variable strFileFullName para crear el archivo de texto en este caso llamado Hola.txt.

    He dado vueltas y no se como encajarlo.

    Creo que te estás complicando innecesariamente. Si tienes la ruta y el fichero, no hay más que juntar la ruta con el fichero (poniendo la "\" entre medias igual que si fueses a escribir la ruta a mano en el explorador de Windows). Es una simple concatenación de strings:

    string strFileName = @"Hola.txt"; // Nombre del archivo.
    string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
    string ficheroAGrabar = ruta + @"\" + strFileName;
    
    ...
    
    File.WriteAllText(ficheroAGrabar, "Hola Mundo.");

    Editado: Y si quieres algo más elegante, puedes usar Path.Combine, que automaticamente concatena la ruta con el fichero y añade la barra intermedia en caso de que no exista ya esa barra en la ruta:

    string strFileName = @"Hola.txt"; // Nombre del archivo.
    string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
    string ficheroAGrabar = Payh.Combine(ruta, strFileName);
    
    ...
    
    File.WriteAllText(ficheroAGrabar, "Hola Mundo.");





    domingo, 11 de marzo de 2018 10:52
    Moderador
  • Buenas:

    No es:

    string ficheroAGrabar = Payh.Combine(ruta, strFileName);

    Es:

    string ficheroAGrabar = Path.Combine(ruta, strFileFullName);

    Casi me vuelvo loco, jejejeje. Pero te entendí. ;)

    Por fin funciona. Dejo el código completo por si alguien lo necesita.

    using System;
    using System.IO; // No olvidar.
    
    namespace Crear_txt_Consola_02_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Crear archivo txt Consola 02 C#";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X. Ancho.
                Console.WindowHeight = 18; // Y. Alto.
    
                /* Creo que te estás complicando innecesariamente. Si tienes la ruta y el fichero, 
                 * no hay más que juntar la ruta con el fichero (poniendo la "\" entre medias igual 
                 * que si fueses a escribir la ruta a mano en el explorador de Windows). Es una simple 
                 * concatenación de strings:
                 */
    
                /*
                 string strFileName = @"Hola.txt"; // Nombre del archivo.
                 string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
                 string ficheroAGrabar = ruta + @"\" + strFileName;
                */
    
                // Variables.
                string strFileFullName = @"Hola.txt"; // Nombre del archivo.
                string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta.
                string ficheroAGrabar = Path.Combine(ruta, strFileFullName); // Concatenar ruta.
    
                // Muestra la ruta en pantalla.
                Console.WriteLine(ruta); // C:\Users\Usuario\Desktop
    
                // Si no existe el archivo.
                if (!File.Exists(ficheroAGrabar))
                {
                    // Crea el contenido al archivo de texto.
                    File.WriteAllText(ficheroAGrabar, "Hola Mundo.");
                }
    
                else // Si existe...
                {
                    // Codigo a ejecutar si existe...
                    Console.WriteLine("El archivo existe, así que no se sustituirá.");
    
                    // Pulse cualquier tecla para salir.
                    Console.ReadKey();
                }
            }
        }
    }


    Muchas gracias por la ayuda.


    http://electronica-pic.blogspot.com


    • Editado Metaconta domingo, 11 de marzo de 2018 11:56
    domingo, 11 de marzo de 2018 11:55
  • No es: [...] strFileName [...] strFileFullName.

    No, no, fíjate bien en el ejemplo completo que yo te puse. Donde tú tenías el nombre de fichero cargado en una variable que tú llamaste strFileFullName, yo te lo cambié y te lo metí en una variable que se llamaba strFileName. Teniendo el fichero en esa variable (como lo tenia mi ejemplo) era correcto hacer el Path.Combine con el mismo nombre de variable.

    La razón por la que te cambié el nombre que tenías puesto era para evitar confusiones, ya que habitualmente cuando se habla de un "Full Name" se refiere a que ya tiene incluida la ruta, mientras que solo se pone "Name" cuando únicamente tiene el nombre de fichero, sin ruta. Dado que tu variable solo tenía el nombre, y no la ruta, por eso la llamé "Name" en lugar de "FUll Name".

    • Marcado como respuesta Metaconta lunes, 12 de marzo de 2018 6:33
    domingo, 11 de marzo de 2018 14:54
    Moderador