Principales respuestas
No me crea el archivo de texto

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
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- Propuesto como respuesta Joyce_ACModerator jueves, 26 de enero de 2017 16:02
- Marcado como respuesta Joyce_ACModerator lunes, 30 de enero de 2017 15:21
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- Propuesto como respuesta Joyce_ACModerator jueves, 26 de enero de 2017 16:02
- Marcado como respuesta Joyce_ACModerator lunes, 30 de enero de 2017 15:21
-
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