CSharp - Clase Fichero (Tratamiento de ficheros)

Written by lopezatienza on 13 Diciembre 2009 – 23:01 -

Aquí os dejo una clase de tratamiento de ficheros con las siguientes opciones entre otras:

  • Apertura de ficheros.
  • Cerrar ficheros.
  • Lectura de ficheros.
  • Escritura de ficheros.
  • Existencia de ficheros.
  • Borrar ficheros.
  • Búsqueda de palabras en ficheros.
  • Búsqueda dicotómica.


using System;

using System.IO;

using System.Windows.Forms;

using System.Collections;

 

      /// <summary>

      /// CLASE FICHERO (Tratamiento de Ficheros)

      /// </summary>

public class Fichero

{

    //public static FileStream Fitxer;

    private static StreamReader LineaLeer;

    private static StreamWriter LineaEscribir;

    private string _Path = "";

    private int _Estado = 0;

    public readonly string Ruta;

    public readonly string NombreFichero;

    public static string Path_Aplicacion = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + @"\";

  

    # region Ficheros

    // Definimos el path del fichero en el constructor

    public Fichero(string Path)

    {

        _Path = Path;

 

        // Guardamos la ruta

        Ruta = _Path;

 

        // Para sacar el nombre del fichero le quitamos toda la ruta

        NombreFichero=_Path;

        while (NombreFichero.IndexOf(@"\") != -1)

        {

            NombreFichero = NombreFichero.Substring(NombreFichero.IndexOf(@"\")+1);

        }

    }

 

    public bool Borrar() // INSTANCIA

    {

        // Primero miramos el estado para comprobar si el fichero esta abierto.

        Cerrar();

                

        try

        {

            // Comprobamos que existe para borrarlo.

            if (Existe(_Path))

            {

                        FileInfo f = new FileInfo(_Path );

                        f.Attributes=FileAttributes.Normal;

                File.Delete(_Path);

                return true;

            }

        }

        catch { }

        return false;

    }

 

    public static bool Borrar(string Path) //ESTATICO

    {

        try

        {

            // Comprobamos que existe para borrarlo.

            if (Existe(Path))

            {

                        FileInfo f = new FileInfo(Path );

                        f.Attributes=FileAttributes.Normal;

                File.Delete(Path);

                return true;

            }

         }

        catch { }

        return false;

    }

 

    public bool Existe()

    {

        if (System.IO.File.Exists(_Path)) return true;

        else return false;

    }

 

    public static bool Existe(string Path)

    {

 

        if (System.IO.File.Exists(Path)) return true;

        else return false;

    }

 

    public int Estado()

    {

        return _Estado;

    }

 

    public bool Abrir(bool Lectura)

    {

        try

        {

            if (Lectura)

            {

                if (Existe())

                {

                    if (_Estado == 2)

                    {

                        if (MessageBox.Show("El fichero ya esta abierto en modo escritura. ¿Quiere cerrarlo para abrirlo en modo lectura?", NombreFichero, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)

                        {

                            Cerrar();

                        }

                        else return false;

                    }

 

                    if (_Estado==0) LineaLeer = new StreamReader(_Path, System.Text.Encoding.Default);

                    _Estado = 1;

                    return true;

                }

                else return false;

 

            }

            else

            {

                if (_Estado == 1)

                {

                    if (MessageBox.Show("El fichero ya esta abierto en modo lectura. ¿Quiere cerrarlo para abrirlo en modo escritura?", NombreFichero, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)

                    {

                        Cerrar();

                    }

                    else return false;

                }

 

                if (_Estado == 0) LineaEscribir = new StreamWriter(_Path, true, System.Text.Encoding.Default);

                _Estado = 2;

                return true;

            }

        }

        catch (IOException ioex)

        {

            MessageBox.Show(ioex.Message, "Abrir", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);

            return false;

        }

        catch (Exception ex)

        {

            MessageBox.Show(ex.Message, "Abrir", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);

            return false;

        }

    }

 

    public void Cerrar()

    {

        try

        {

            switch (_Estado)

            {

                case 1:  LineaLeer.Close();     break;

                case 2:  LineaEscribir.Close(); break;

            }

            _Estado = 0;

        }

        catch{}

    }

 

    public void Escribir(string Texto)

    {

        try

        {

            if (_Estado == 2)

            {

                LineaEscribir.WriteLine(Texto);

                LineaEscribir.Flush();

            }

        }

        catch (Exception ex)

        {

            string Fallo = ex.Message;

            //throw;

        }

    }

 

    public string Leer()

    {

        string Linia = "";

        try

        {

            Linia = LineaLeer.ReadLine();

 

        }

        catch

        {

            Linia = null;

        }

        return Linia;

    }

    #endregion ficheros;

 

    #region Busqueda Dicotomica (Fichero Ordenado)

    public string Buscar_Ord(string CampoBuscar, int NumeroCampo, char Separador)

    {   // CampoBuscar = Camop buscado en el archivo

        // NumeroCampo = Posicion del campo en la linea

        // Separador = cter separador de campo

        try

        {

            FileStream fs = new FileStream(_Path, FileMode.Open);

            FileInfo fileInf = new FileInfo(_Path);

 

            BinaryReader br = new BinaryReader(fs);

            long IniFich = 0;

            long FinFich = fileInf.Length;

 

            long posIni = IniFich;   // Posicion desde donde empezamos a buscar

            long posFin = FinFich;   //Posicion hasta donde vamos a buscar

            string linea = "";       //Linea en la que nos encontramos 

            bool encontrado = false; //nos dira cuando hemos encontrado el string

 

            int intCter;             // Contendra el ASCII del caracter actual

            long i;                  // Ayuda a recorrer el archivo

            int resComparacion;      // Resultado de las comparaciones entre string

            string[] Campos;         // Vector con los campos de la linea

 

            //Para controlar fin de busqueda

            bool esPrimeraLinea = false; //Nos dice si estamos en la primera linea

            bool esUltimaLinea = false;  //Si estamos en la ultima linea

            string lineaAntigua = "";    //Controla cuando buscamos elemento intermedio y no existe

            //Si linea actual = antigua, es que no encontramos elemento

 

            while ((!encontrado) && (posIni <= posFin))

            {

                //Nos posicionamos en la mitad del tamaño de la zona de busqueda

                linea = "";

                long mitad = (posIni + posFin) / 2;

 

                #region Obtencion de la linea actual

                //Recuperamos la linea en la que no encontramos

                //1º Obtengo el caracter de mitad del archivo

                //2º Almaceno en "linea" desde el actual caracter, hasta el principio de la linea           

                i = mitad;

                br.BaseStream.Position = i;

                while (((intCter = br.Read()) != -1) && (intCter != 10) && (i >= IniFich))//Salto de linea

                {//leemos caracteres anteriores al actual hasta llegar al principio de la linea

                    linea = Convert.ToChar(intCter) + linea;

                    i--;

                    if (i >= IniFich)

                        br.BaseStream.Position = i;

                    else

                        esPrimeraLinea = true;

                }

                //3º Almaceno en "linea" desde el actual caracter, hasta el final de la linea

                i = mitad + 1;

                br.BaseStream.Position = i;

                while (((intCter = br.Read()) != -1) && (intCter != 13))//retorno de carro

                {//leemos los caracteres siguientes al de la mitad del archivo hasta el final de la linea

                    linea += Convert.ToChar(intCter);

                    i++;

                    br.BaseStream.Position = i;

                }

                if (intCter == -1) //Controlamos si es ultima fila

                    esUltimaLinea = true;

                #endregion

 

                //Una vez obtenida la linea actual, obtenemos el campo indicado

                //y realizamos las comparaciones para saber si tenemos que seguir buscando o no

                Campos = linea.Split(Separador);

                if (NumeroCampo >= Campos.Length) //Error en la busqueda

                    throw new Exception();

 

                //Si linea actual = linea antigua, es que no existe el elemento buscado

                if (string.Compare(linea, lineaAntigua) == 0)

                    posFin = posIni - 1; //Forzamos salida bucle

                else

                    lineaAntigua = linea;

 

 

                resComparacion = string.Compare(CampoBuscar.ToLower(), Campos[NumeroCampo].ToLower());

 

                //Campos[NumeroCampo].Contains(

                if (resComparacion == 0) //lo hemos encontrado

                    encontrado = true;

                else if ((esPrimeraLinea) || (esUltimaLinea))

                    posFin = posIni - 1; //Forzamos salida bucle

                else if (resComparacion < 0)

                    posFin = mitad;

                else

                    posIni = mitad;

            }

 

            fs.Close();

            br.Close();

 

            if (encontrado)

                return linea;

            else

                return null;

        }

        catch (Exception e)

        {

            MessageBox.Show(e.Message.ToString());

            return null;

        }

    }

 

    public string Buscar_Ord(string CampoBuscar, int PosicionInicial, int PosicionFinal)

    {   // CampoBuscar = Camop buscado en el archivo

        // PosicionInicial = Posicion del primer cter a comparar

        // PosicionFinal = Posicion del ultimo caracter a comparar

        try

        {

            FileStream fs = new FileStream(_Path, FileMode.Open);

            FileInfo fileInf = new FileInfo(_Path);

 

            BinaryReader br = new BinaryReader(fs);

            long IniFich = 0;

            long FinFich = fileInf.Length;

            //El campo buscado lo adaptamos a la lngitud pasada

            string CampoBuscado = CampoBuscar.PadRight(PosicionFinal - PosicionInicial + 1, ' ');

 

            long posIni = IniFich;   // Posicion desde donde empezamos a buscar

            long posFin = FinFich;   //Posicion hasta donde vamos a buscar

            string linea = "";       //Linea en la que nos encontramos 

            bool encontrado = false; //nos dira cuando hemos encontrado el string

 

            int intCter;             // Contendra el ASCII del caracter actual

            long i;                  // Ayuda a recorrer el archivo

            int resComparacion;      // Resultado de las comparaciones entre string

 

            //Para controlar fin de busqueda

            bool esPrimeraLinea = false; //Nos dice si estamos en la primera linea

            bool esUltimaLinea = false;  //Si estamos en la ultima linea

            string lineaAntigua = "";    //Controla cuando buscamos elemento intermedio y no existe

            //Si linea actual = antigua, es que no encontramos elemento

 

            while ((!encontrado) && (posIni <= posFin))

            {

                //Nos posicionamos en la mitad del tamaño de la zona de busqueda

                linea = "";

                long mitad = (posIni + posFin) / 2;

 

                #region Obtencion de la linea actual

                //Recuperamos la linea en la que no encontramos

                //1º Obtengo el caracter de mitad del archivo

                //2º Almaceno en "linea" desde el actual caracter, hasta el principio de la linea           

                i = mitad;

                br.BaseStream.Position = i;

                while (((intCter = br.Read()) != -1) && (intCter != 10) && (i >= IniFich))//Salto de linea

                {//leemos caracteres anteriores al actual hasta llegar al principio de la linea

                    linea = Convert.ToChar(intCter) + linea;

                    i--;

                    if (i >= IniFich)

                        br.BaseStream.Position = i;

                    else

                        esPrimeraLinea = true;

                }

                //3º Almaceno en "linea" desde el actual caracter, hasta el final de la linea

                i = mitad + 1;

                br.BaseStream.Position = i;

                while (((intCter = br.Read()) != -1) && (intCter != 13))//retorno de carro

                {//leemos los caracteres siguientes al de la mitad del archivo hasta el final de la linea

                    linea += Convert.ToChar(intCter);

                    i++;

                    br.BaseStream.Position = i;

                }

                if (intCter == -1) //Controlamos si es ultima fila

                    esUltimaLinea = true;

                #endregion

 

                //Si linea actual = linea antigua, es que no existe el elemento buscado

                if (string.Compare(linea, lineaAntigua) == 0)

                    posFin = posIni - 1; //Forzamos salida bucle

                else

                    lineaAntigua = linea;

 

                resComparacion = string.Compare(CampoBuscado.ToLower(),

                                                linea.Substring(PosicionInicial, PosicionFinal - PosicionInicial + 1).ToLower());

                if (resComparacion == 0) //lo hemos encontrado

                    encontrado = true;

                else if ((esPrimeraLinea) || (esUltimaLinea))

                    posFin = posIni - 1; //Forzamos salida bucle

                else if (resComparacion < 0)

                    posFin = mitad;

                else

                    posIni = mitad;

            }

 

            fs.Close();

            br.Close();

 

            if (encontrado)

                return linea;

            else

                return null;

        }

        catch (Exception e)

        {

            MessageBox.Show(e.Message.ToString());

            return null;

        }

    }

    #endregion pablo;

 

    #region Busqueda Simple

 

    public string Buscar(string CampoBuscar, int NumeroCampo, char Separador, bool BusquedaExacta)

    {

        long ahora = DateTime.Now.Ticks;

        string palabra = "";

        bool encontrar = false;

        string linea = "";

 

        if (System.IO.File.Exists(_Path))

        {

            StreamReader LineaLeer = new StreamReader(_Path);

            string sLine = "";

            ArrayList arrText = new ArrayList();

 

            while (sLine != null)

            {

                sLine = LineaLeer.ReadLine();

                if (sLine != null)

                {

                    string cadena = sLine;

                    if (cadena.IndexOf(Separador) < 1)

                    // comprobar si en la linea seleccionada hay algun separador

                    {

                        palabra = cadena;

                        palabra = palabra.Substring(0, CampoBuscar.Length);

                    }

                    else

                    {

                        string[] vector = cadena.Split(Separador);

                        // calcular el numero de separadores de esa linea

                        try

                        {

                            palabra = vector[NumeroCampo];

 

                        }

                        catch

                        {

                            break;

                        }

                    }

                    if (BusquedaExacta == true)

                    {

                        if (String.Compare(palabra.ToLower(), CampoBuscar.ToLower()) == 0)

                        {

 

                            // PARA IR GUARDANDOLO EN UN ARRAY TODOS LOS VALORES QUE ENCUENTRE

                            arrText.Add(sLine);

                            encontrar = true;

                            linea = sLine;

 

                            //    tiempo(ahora);

                            //     break;

                        }

                    }

                    else

                    {

                        if (palabra.IndexOf(CampoBuscar.ToLower()) > -1)

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                            // MessageBox.Show(sLine);

                            //     tiempo(ahora);

                            //break;

                        }

                    }

                }

            }

            LineaLeer.Close();

            //Cuando no encuentra el campo buscado

            if (encontrar == false)

                linea = null;

 

        }

        else

            MessageBox.Show("ARCHIVO NO ENCONTRADO");

 

        return linea;

    }

 

    public string Buscar(string CampoBuscar, int PosicionInicial, int PosicionFinal, bool BusquedaExacta)

    {

        long ahora = DateTime.Now.Ticks;

        bool encontrar = false;

        string distancia = "";

        string linea = "";

        if (System.IO.File.Exists(_Path))

        {

            StreamReader LineaLeer = new StreamReader(_Path);

            string sLine = "";

            ArrayList arrText = new ArrayList();

 

            while (sLine != null)

            {

                sLine = LineaLeer.ReadLine();

                if (sLine != null)

                {

                    if (PosicionFinal == 0)

                        // cuando no pone posicion final me recorreria la frase entera

                        try

                        {

                            distancia = sLine.Substring(PosicionInicial);

                        }

                        catch

                        {

                            break;

                        }

 

                    else

                        try

                        //cuando se las dos posiciones

                        {

 

                            distancia = sLine.Substring(PosicionInicial, PosicionFinal - PosicionInicial + 1);

                        }

                        catch

                        {

                            break;

                        }

 

                    if (BusquedaExacta == true)

                    {

                        if (string.Compare(distancia, CampoBuscar.ToLower()) == 0 ||

                            string.Compare(distancia, CampoBuscar.ToUpper()) == 0)

                        {

                            encontrar = true;

                            linea = sLine;

                            break;

                        }

                    }

                    else

                    {

                        if ((distancia.IndexOf(CampoBuscar.ToLower()) > -1) || (distancia.IndexOf(CampoBuscar.ToUpper()) > -1))

                        {

                            encontrar = true;

                            linea = sLine;

                            break;

                        }

                    }

                }

            }

 

            LineaLeer.Close();

 

            //cuando no encuetra el campo

            if (encontrar == false)

                linea = null;

        }

         else

            Error.Mostrar("Arhivo no encontrado.","ERROR");

 

        return linea;

    }

    #endregion;

 

    #region BuscarTodo (Devuelve todos los valores buscados)

 

    public static string[] BuscarTodo(string Path, string CampoBuscar, int NumeroCampo, char Separador, bool BusquedaExacta)

    {

        long ahora = DateTime.Now.Ticks;

        string Campo = "";

        bool encontrar = false;

        string linea = "";

        string[] matriz = null;

        ArrayList arrText = new ArrayList();

 

        if (System.IO.File.Exists(Path))

        {

            StreamReader LineaLeer = new StreamReader(Path);

            string sLine = "";

 

            while (sLine != null)

            {

                sLine = LineaLeer.ReadLine();

                if (sLine != null)

                {

                    string cadena = sLine;

                    if (cadena.IndexOf(Separador) < 1)

                    // comprobar si en la linea seleccionada hay algun separador

                    {

                        Campo = cadena;

                        Campo = Campo.Substring(0, CampoBuscar.Length);

                    }

                    else

                    {

                        string[] vector = cadena.Split(Separador);

                        // calcular el numero de separadores de esa linea

                        try

                        {

                            Campo = vector[NumeroCampo];

 

                        }

                        catch

                        {

                            break;

                        }

                    }

                    if (BusquedaExacta == true)

                    {

                        if (String.Compare(Campo.ToLower(), CampoBuscar.ToLower()) == 0)

                        {

 

                            // PARA IR GUARDANDOLO EN UN ARRAY TODOS LOS VALORES QUE ENCUENTRE

                            arrText.Add(sLine);

                            encontrar = true;

                            linea = sLine;

                        }

                    }

                    else

                    {

                        if (Campo.ToLower().IndexOf(CampoBuscar.ToLower()) > -1)

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                        }

                    }

                }

 

            }

            LineaLeer.Close();

 

        }

        else

            Error.Mostrar("Arhivo no encontrado.", "ERROR");

 

        if (encontrar == true)

 

            matriz = (string[])arrText.ToArray(typeof(string));

 

        else matriz = null;

 

        return matriz;

    }

 

    public string[] BuscarTodo(string CampoBuscar, int NumeroCampo, char Separador, bool BusquedaExacta)

    {

        long ahora = DateTime.Now.Ticks;

        string Campo = "";

        bool encontrar = false;

        string linea = "";

        string[] matriz = null;

        ArrayList arrText = new ArrayList();

 

        // Si el fichero esta abierto lo cerramos

        if (_Estado > 0) Cerrar();

 

        if (Abrir(true))

        {

            string sLine = "";

 

            while (sLine != null)

            {

                sLine = Leer();

                if (sLine != null)

                {

                    string cadena = sLine;

                    if (cadena.IndexOf(Separador) < 1)

                    // comprobar si en la linea seleccionada hay algun separador

                    {

                        Campo = cadena;

                        Campo = Campo.Substring(0, CampoBuscar.Length);

                    }

                    else

                    {

                        string[] vector = cadena.Split(Separador);

                        // calcular el numero de separadores de esa linea

                        try

                        {

                            Campo = vector[NumeroCampo];

 

                        }

                        catch

                        {

                            break;

                        }

                    }

                    if (BusquedaExacta == true)

                    {

                        if (String.Compare(Campo.ToLower(), CampoBuscar.ToLower()) == 0)

                        {

 

                            // PARA IR GUARDANDOLO EN UN ARRAY TODOS LOS VALORES QUE ENCUENTRE

                            arrText.Add(sLine);

                            encontrar = true;

                            linea = sLine;

                        }

                    }

                    else

                    {

                        if (Campo.ToLower().IndexOf(CampoBuscar.ToLower()) > -1)

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                        }

                    }

                }

 

            }

 

        }

        else

            Error.Mostrar("Arhivo no encontrado.", "ERROR");

 

        if (encontrar == true) matriz = (string[])arrText.ToArray(typeof(string));

        else matriz = null;

 

        return matriz;

 

    }

 

    public static string[] BuscarTodo(string Path, string CampoBuscar, int PosicionInicial, int PosicionFinal, bool BusquedaExacta)

    {

        long ahora = DateTime.Now.Ticks;

        bool encontrar = false;

        string distancia = "";

        string linea = "";

        string[] matriz = null;

        ArrayList arrText = new ArrayList();

 

 

        if (System.IO.File.Exists(Path))

        {

            StreamReader LineaLeer = new StreamReader(Path);

 

            string sLine = "";

 

 

            while (sLine != null)

            {

                sLine = LineaLeer.ReadLine();

                if (sLine != null)

                {

                    if (PosicionFinal == 0)

                    {

                        // cuando no pone posicion final me recorreria la frase entera

                        try

                        {

                            distancia = sLine.Substring(PosicionInicial);

                        }

                        catch

                        {

                            break;

                        }

                    }

 

                    else

                    {

                        try

                        //cuando se las dos posiciones

                        {

                            distancia = sLine.Substring(PosicionInicial, PosicionFinal - PosicionInicial + 1);

                        }

                        catch

                        {

                            break;

                        }

                    }

 

                    if (BusquedaExacta == true)

                    {

                        if (string.Compare(distancia, CampoBuscar.ToLower()) == 0 ||

                            string.Compare(distancia, CampoBuscar.ToUpper()) == 0)

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                        }

                    }

                    else

                    {

                        if ((distancia.ToLower().IndexOf(CampoBuscar.ToLower()) > -1) || (distancia.ToLower().IndexOf(CampoBuscar.ToUpper()) > -1))

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                        }

                    }

                }

            }

 

            LineaLeer.Close();

 

 

        }

        else

            Error.Mostrar("Arhivo no encontrado.", "ERROR");

 

        if (encontrar == true)

 

            matriz = (string[])arrText.ToArray(typeof(string));

 

        else matriz = null;

 

        return matriz;

 

    }

 

    public string[] BuscarTodo( string CampoBuscar, int PosicionInicial, int PosicionFinal, bool BusquedaExacta)

    {

        long ahora = DateTime.Now.Ticks;

        bool encontrar = false;

        string distancia = "";

        string linea = "";

        string[] matriz = null;

        ArrayList arrText = new ArrayList();

 

 

        // Si el fichero esta abierto lo cerramos

        if (_Estado > 0) Cerrar();

 

        if (Abrir(true))

        {

 

            string sLine = "";

           

            while (sLine != null)

            {

                sLine = Leer();

                if (sLine != null)

                {

                    if (PosicionFinal == 0)

                    {

                        // cuando no pone posicion final me recorreria la frase entera

                        try

                        {

                            distancia = sLine.Substring(PosicionInicial);

                        }

                        catch

                        {

                            break;

                        }

                    }

 

                    else

                    {

                        try

                        //cuando se las dos posiciones

                        {

                            distancia = sLine.Substring(PosicionInicial, PosicionFinal - PosicionInicial + 1);

                        }

                        catch

                        {

                            break;

                        }

                    }

 

                    if (BusquedaExacta == true)

                    {

                        if (string.Compare(distancia, CampoBuscar.ToLower()) == 0 ||

                            string.Compare(distancia, CampoBuscar.ToUpper()) == 0)

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                        }

                    }

                    else

                    {

                        if ((distancia.ToLower().IndexOf(CampoBuscar.ToLower()) > -1) || (distancia.ToLower().IndexOf(CampoBuscar.ToUpper()) > -1))

                        {

                            encontrar = true;

                            linea = sLine;

                            arrText.Add(sLine);

                        }

                    }

                }

            }

        }

        else

            Error.Mostrar("Arhivo no encontrado.","ERROR");

        

        if (encontrar == true)

 

            matriz = (string[])arrText.ToArray(typeof(string));

 

        else matriz = null;

 

        return matriz;

 

    }

 #endregion

  

}

Descargar Clase Fichero.cs
pass: lopezatienza.es


Tags: ,
Posted in CSharp |

Leave a Comment

RSS