none
No me crea el archivo de texto RRS feed

  • Pregunta

  • Hola:

    Haciendo un programita sobre obtener información de red, quiero plasmar esa información en un archivo.txt y no me sale.

    El código está hecho en consola C#.

    Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net.NetworkInformation; // No olvidar.
    using System.IO;
    
    namespace Recopilar_informacion_PC
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Title = "Recopilar información";
    
                
                MAC leerMAC = new MAC(); // Leer MAC.
                Barra br = new Barra(); // Barra amarilla.
                
    
                br.barra();
                leerMAC.Leer_MAC();
                br.barra();
    
                // var macAddr = (from nic in NetworkInterface.GetAllNetworkInterfaces() select nic.GetPhysicalAddress().ToString()).ToArray();
                
    
                // Para escribir datos en un archivo.
                StreamWriter Texto = new StreamWriter("Archivo.txt");
    
                foreach (var address in leerMAC)
                {
                    Texto.WriteLine(address);
                    Console.WriteLine(address);
                }
    
                Texto.Close(); // Cerrar archivo.
    
            }
        }
    }

    Gravedad    Código    Descripción    Proyecto    Archivo    Línea
    Error    CS1579    La instrucción foreach no puede funcionar en variables de tipo 'Recopilar_informacion_PC.MAC' porque 'Recopilar_informacion_PC.MAC' no contiene ninguna definición pública para 'GetEnumerator'    Recopilar_informacion_PC    c:\users\usuario\documents\visual studio 2015\Projects\Recopilar_informacion_PC\Recopilar_informacion_PC\Program.cs    34

    MAC.cs

    using System;
    using System.Net.NetworkInformation; // No olvidar.
    
    namespace Recopilar_informacion_PC
    {
        class MAC
        {
            public void Leer_MAC()
            {
                string Nombre_HostName = null;
                string Nombre_Dominio = null;
                string MAC = null;
    
                IPGlobalProperties Propiedades_PC = IPGlobalProperties.GetIPGlobalProperties();
                NetworkInterface[] Interfaz_red = NetworkInterface.GetAllNetworkInterfaces();
                Console.WriteLine("Información de interfaz para {0}.{1}     ",
                        Propiedades_PC.HostName, Propiedades_PC.DomainName);
                if ((Interfaz_red == null) || (Interfaz_red.Length < 1))
                {
                    Console.WriteLine("  No hay interfaces de red encontrados.");
                    return;
                }
    
                Console.WriteLine("  Número de interfaces .................... : {0}", Interfaz_red.Length);
                foreach (NetworkInterface Adaptador in Interfaz_red)
                {
                    IPInterfaceProperties Propiedades = Adaptador.GetIPProperties(); //  .GetIPInterfaceProperties();
                    Console.WriteLine();
                    Console.WriteLine(Adaptador.Description);
                    Console.WriteLine(String.Empty.PadLeft(Adaptador.Description.Length, '='));
                    Console.WriteLine("  Tipo interfaz ........................... : {0}", Adaptador.NetworkInterfaceType);
                    Console.Write("  Dirección física ........................ : ");
                    PhysicalAddress Direccion = Adaptador.GetPhysicalAddress();
                    byte[] bytes = Direccion.GetAddressBytes();
                    // Variable que tendra la dirección visible.
                    string direccion_MAC = string.Empty;
                    // Recorrer todos los bytes de la dirección.
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        // Muestra la dirección física en hexadecimal.
                        direccion_MAC += bytes[i].ToString("X2");
                        Console.Write("{0}", bytes[i].ToString("X2"));
                        // Inserte un guión después de cada bocado, a menos que estemos al final de la dirección. 
                        if (i != bytes.Length - 1)
                        {
                            // Agregar un separador, por formato.
                            direccion_MAC += "-";
                            Console.Write("-");
                        }
                        MAC = direccion_MAC;
                    }
                    Console.WriteLine();
                }
    
                // Guarda el nombre del hostname en la variable Nombre_HostName.
                Nombre_HostName = Propiedades_PC.HostName;
    
                // Guarda el nombre del dominio si lo tiene.
                Nombre_Dominio = Propiedades_PC.DomainName;
    
    
                // Guarda la MAC recibida con sus - en la varible MAC.
                //MAC = direccion_MAC;
    
                Console.WriteLine();
                Console.WriteLine(@"Nombre del HostName: {0}", Nombre_HostName);
                Console.WriteLine(@"Nombre del domninio: {0}", Nombre_Dominio);
                Console.WriteLine(@"MAC es: {0}", MAC);
                Console.ReadKey(); // Pulsa cualquier tecla y sale.
            }
        }
    }
    Barra.cs
    using System;
    
    namespace Recopilar_informacion_PC
    {
        class Barra
        {
            public void barra()
            {
                Console.ForegroundColor =  ConsoleColor.Yellow;
                Console.WriteLine("################################################################################");
                Console.ForegroundColor = ConsoleColor.Gray;
            }
        }
    }


    ¿Algo se me escapa?

    Haré más métodos o funciones, en cada una de ellas almacena información, así que no debe borrarse el contenido viejo, cuando llegan otro método.

    Si vuelvo a ejecutar el ejecutable, sustituye el archivo.txt viejo por otro nuevo sin preguntar,y cada función que añada en el futuro, sume nuevos datos sin perder los viejos.

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta lunes, 23 de enero de 2017 23:54
    lunes, 23 de enero de 2017 23:52

Respuestas

  • Hola Metaconta,

    Es lógico que muestre un error, ya que si analizas detalladamente :

    - Creas una nueva instancia de la clase 'MAC' llamado leerMAC.

    MAC leerMAC = new MAC(); //Leer MAC.

    Y quieres realizar una iteración al objeto ?

    StreamWriter Texto = new StreamWriter("Archivo.txt");
    
    foreach (var address in leerMAC)
    {
        Texto.WriteLine(address);
        Console.WriteLine(address);
    }

    Por cierto, no veo un método que retorne una colección de datos para poder hacer una iteración usando el foreach o for.

    Algo como :

    public string[] leer_Datos()
    {
        /*Algún código ....*/;
    }

    Y para leerlo :

    MAC leerMAC = new MAC(); //Leer MAC.
    
    StreamWriter Texto = new StreamWriter("Archivo.txt");
    
    foreach (var address in leerMAC.leer_Datos())
    {
        Texto.WriteLine(address);
        Console.WriteLine(address);
    }


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 24 de enero de 2017 0:06

Todas las respuestas

  • Hola Metaconta,

    Es lógico que muestre un error, ya que si analizas detalladamente :

    - Creas una nueva instancia de la clase 'MAC' llamado leerMAC.

    MAC leerMAC = new MAC(); //Leer MAC.

    Y quieres realizar una iteración al objeto ?

    StreamWriter Texto = new StreamWriter("Archivo.txt");
    
    foreach (var address in leerMAC)
    {
        Texto.WriteLine(address);
        Console.WriteLine(address);
    }

    Por cierto, no veo un método que retorne una colección de datos para poder hacer una iteración usando el foreach o for.

    Algo como :

    public string[] leer_Datos()
    {
        /*Algún código ....*/;
    }

    Y para leerlo :

    MAC leerMAC = new MAC(); //Leer MAC.
    
    StreamWriter Texto = new StreamWriter("Archivo.txt");
    
    foreach (var address in leerMAC.leer_Datos())
    {
        Texto.WriteLine(address);
        Console.WriteLine(address);
    }


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 24 de enero de 2017 0:06
  • Hola:

    Pues no tengo idea.

    Lo he intentado y me sale esto de abajo que está muy mal.

    using System;
    using System.IO;
    
    namespace Recopilar_informacion_PC
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Title = "Recopilar información";
    
                
                MAC leerMAC = new MAC(); // Leer MAC.
                Barra br = new Barra(); // Barra amarilla.
                
    
    
                
    
                // Para escribir datos en un archivo.
                StreamWriter Texto = new StreamWriter("Archivo.txt");
    
                foreach (var address in leerMAC.leer_Datos())
                {
                    Texto.WriteLine(address);
                    Console.WriteLine(address);
                }
    
                Texto.Close(); // Cerrar archivo.
            }
    
            public void string[] leer_Datos()
            {
                /*Algún código ....*/
                // Tiene que ser losmétodos de abajo.
    
                br.barra();
                leerMAC.Leer_MAC();
                br.barra();
    
            }
        }
    }

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 24 de enero de 2017 0:43