Posteado por: fzapataramirez | viernes, noviembre 14, 2008

Lectura y escritura de archivos en c#

El manejo de archivos en la plataforma .NET se logra mediante la clase Stream que representa un flujo de información (Un archivo es considerado un flujo de datos, al igual que los datos transferidos de un dispositivo a otro, o los datos transferidos por la red mediante TCP/IP).

La clase Stream, es una clase abstracta, por lo que no es posible utilizarla directamente ya que no se puede crear instancias. Lo que se debe hacer es utilizar una de sus clases derivadas que se especializan en el tratamiento de streams para diferentes destinos como por ejemplo FileStream (para el manejo de archivos), Memorystream (para el manejo de datos en memoria), etc.

La primera opción para escribir y/o leer datos de una archivo de texto es utilizar la clase FileStream. Esta clase se encuentra en el namespace System.IO y es una clase derivada de la clase Stream.

El FileStream actúa como un intermediario entre el sistema de archivos y nuestra aplicación, permitiendo realizar de una manera limpia y sencilla operaciones de escritura y lectura en archivos. Para utilizar el FileStream, lo primero que se debe hacer es crear una instancia que apunte al archivo deseado. Para esto se tiene la opción de utilizar alguno de los constructores ofrecidos, tal y como se muestra a continuación:

clip_image002

Como se ve en la figura anterior, es un constructor bastante tedioso de utilizar porque recibe una cantidad considerable de parámetros. Para contrarestar esto, tenemos la posibilidad de utilizar alguno de los métodos ofrecidos por la clase utilitaria File, que nos permite obtener un FileStream con parámetros específicos de acuerdo al método utilizado para obtenerlo. A continuación se muestra un ejemplo:

clip_image004

En el ejemplo anterior se utilizó el método Create el cual crea el archivo en la ruta especificada y en caso de que el archivo exista, es sobrescrito. Estos métodos ofrecidos por la clase File, facilitan el desarrollo de aplicaciones con manejo de archivos y permite una mejor lectura de código.

Para escribir datos en un archivo de texto, se utilizan los métodos Write y WriteByte. El primero recibe como parámetro un vector de bytes que representa la información a almacenar, mientras el segundo recibe como parámetro un solo byte para ser escrito. Elegir cual de los dos métodos utilizar depende del escenario, ya que cuando se va a escribir gran cantidad de información, no es recomendable escribir byte a byte porque se ejecutaría muchas veces el mismo ciclo sino que por el contrario, es conveniente escribir varios bytes a la vez.

A continuación se muestra un ejemplo de la operación de escritura con ambos métodos:

clip_image006

Se puede observar como se utiliza la clase Encoding para formatear la cadena en UTF8 y obtener el array de bytes que se debe escribir en el archivo. De la misma manera se puede codificar el texto a escribir en otro formato como por ejemplo ASCII, Unicode, etc.

Es importante mencionar que todo stream se debe cerrar al finalizar la operación que se realiza sobre el, ya que de lo contrario el archivo quedaría bloqueado y no se liberarían recursos del sistema operativo. Adicionalmente, el método Flush, se utiliza para indicarle a la clase FileStream, que escriba en el archivo físico lo que se ha escrito con el método WriteByte o con el método Write hasta el momento ya que de lo contrario, dichos cambios se verían reflejados únicamente cuando se cierre el Stream. Este método seria útil cuando queremos que se escriba el texto en el archivo y no deseamos cerrar el Stream porque necesitamos seguir haciendo operaciones de escritura, además de ser una buena práctica siempre utilizarlo aun cuando parezca ser innecesario.

La implementación de la misma funcionalidad con el otro método, seria como se muestra a continuación.

clip_image008

Como se ve en el ejemplo anterior, con estos métodos, el programador tiene un control muy preciso sobre la información que desea escribir en el archivo, tanto, que hasta puede llegar a ser engorroso en algunas ocasiones.

Afortunadamente, la plataforma .NET ofrece otras maneras de administrar Streams para hacerle la vida más fácil al desarrollador. Una de esas maneras es utilizar la clase StreamWriter para escribir en archivos y StreamReader para leer desde archivos. Es necesario tener en cuenta que estas clases están orientadas a obtener caracteres como salida a diferencia de las clases que heredan de Stream que están orientadas a obtener bytes.

Con la clase StreamWriter, solo nos debemos preocupar por utilizar el método Write o WriteLine para escribir datos en un archivo de texto. Estos métodos reciben tipos de datos nativos del lenguaje como por ejemplo int, bool, decimal, float, string, char, etc. Y utiliza el codificador indicado cuando se instancia la clase para codificar los caracteres de salida al archivo de texto. En caso de utilizar un constructor que no especifique algún Encoding, por defecto esta clase opera con el UTF8.

clip_image010

Como se ve en el ejemplo anterior, las líneas de código son mucho mas sencillas que las vistas en el ejemplo del FileStream. Esto es porque la clase StreamWriter es una clase especializadas para el trabajo de Stream hacia archivos de texto y nos evita el trabajo de tener que obtener la representación en bytes del valor que queramos escribir.

La diferencia entre el método Write y WriteLine, es que el segundo inserta un salto de línea al final de los datos ingresados, haciendo que la próxima vez que se quiera insertar, se hará en la siguiente línea.

Aunque la clase StreamWriter no hereda de la clase Stream, si utiliza en su implementación un Stream en el cual escribe o lee secuencias de caracteres. Por eso, esta clase en su interior, se encarga de crear y utilizar el Stream necesario para apuntar al archivo de texto representado por la ruta que se utilizo en el constructor del ejemplo. Sin embargo, esta clase también tiene otro constructor donde se le puede pasar un Stream que tengamos creado en lugar de la ruta, como se ve a continuación:

clip_image012

El complemento del objeto StreamWriter es el objeto StreamReader, cuyo principal objetivo es facilitarnos las tareas de lectura de cadenas de caracteres. Con este objeto, nos podemos despreocupar de esas tareas de bajo nivel para poder obtener un código mucho mas limpio y fácilmente legible.

clip_image014

En el ejemplo se ve como fácilmente se puede leer información de un archivo de texto utilizando el método ReadLine del objeto StreamReader. Este método, simplemente lee la línea siguiente teniendo en cuenta la posición actual del puntero del archivo.

Es importante aclarar que utilizando los streams vistos hasta el momento se pueden leer y escribir en archivos de texto cadenas de caracteres, es decir, texto plano. Esto implica que la información escrita en los archivos podrá ser vista y entendida por cualquier persona, ya que se guarda tal y como se encuentra en un principio.

Lo anterior puede llegar a ser un problema en los casos en que se elige utilizar archivos de texto como repositorio de datos de una aplicación (aunque esto es poco recomendable, habrán casos en los pueda llegar a ser necesario), y digo que es un problema porque podría haber información que no queremos que cualquier persona la pueda ver y mucho menos entender, sino que quisiéramos que dicha información estuviera almacenada de forma segura.

Una posible opción para esto es almacenando la información en formato binario, es decir, que la información estará almacenada no en formato de texto plano sino en su representación binaria (1s y 0s), lo cual permite tener mas privacidad (OJO, solo mas privacidad, no mucha privacidad ni seguridad. Si el punto fuera como obtener una forma segura de almacenar información tendríamos que mirar los temas de cifrado y hashing). En .NET, el objeto que nos facilita trabajar con Stream de datos binarios es el BinaryWriter y el BinaryReader, los cuales supongo pueden deducir como se utilizan según lo visto anteriormente.

El primero permite escribir datos en un archivo de texto en formato binario mediante el método Write(), el cual.tiene varias sobrecargas entre los cuales acepta varios tipos de dato como por ejemplo int, long, bool, double, decimal, char, string. El segundo permite recuperar información almacenada en formato binario por medio del método indicado. Como así que por medio del método indicado?. Lo que sucede con el BinaryReader es que no tiene un método Read genérico, sino que tiene un Read para cada tipo de dato que puede ser escrito, por ejemplo ReadInt32, ReadBoolean, ReadChar, etc. Esto nos obliga a conocer la estructura del archivo con el que estamos trabajando para poder leer el tipo de dato correcto en la posición correcta.

A continuación se muestra un pequeño ejemplo sobre como utilizar el BinaryReader y el BinaryWriter.

clip_image016

En el ejemplo anterior se observa como se puede escribir varios tipos de dato con el mismo método Write del objeto BinaryWriter ya que tiene varias sobrecargas.

A continuación se muestra como se vería la información en el caso de intentar visualizarla con un editor de texto:

clip_image018

Para leer información binaria se utiliza el objeto BinaryReader y se utiliza “El método indicado”.

clip_image020

En el ejemplo anterior se observa como se utiliza el método de lectura según el tipo de dato que desee leer, lo cual implica que con anterioridad se conozca la estructura del archivo. En este caso, nótese que se leyó exactamente en el mismo orden en el que se escribió la información con el BinaryWriter.

El siguiente es el resultado de la ejecución del código anterior:

clip_image022


Respuestas

  1. Se puede que tenga una cadena por ejemplo
    «Esta es mi cadena»

    y al escribirlo al archivo lo escriba de esta forma???

    «Esta es mi cadena»

  2. Claro que sí, utilizando la clase StreamWriter se puede almacenar la infomracion en cadenas de caracteres sobre archivos de texto.

    Simplemente debes usar el método Write sobre una instancia de la clase StreamWriter

    Saludos

    • Una pregunta si en el archivo de texto tengo 10 números y quiero presentar en una caja la texto la suma del ultimo+ el antepenultimo numero como lo haria,sin utilizar matrices, no se como extraer los numeros del fichero.

  3. Gracias por la respuesta pero creo q no salió mi comentario completo, a lo q me refiero es q si tengo mi cadena «Esta es mi nueva cadena» puedo truncar esa cadena en «Esta es» y una línea abajo escriba el resto de la cadena «mi nueva cadena»?

  4. Claro que si

    Tienes dos opciones.

    1. modificar la cadena original, insertando la secuencia de caracteres «\n» lo cual indica que se inserte un salto de linea. Por lo tanto tu nueva cadena seria «Esta es \n mi nueva cadena» y luego utilizas el metodo Write de la clase StreamWriter.

    2. Utilizar dos cadenas en lugar de una y utilizar el metodo WriteLine, asi:

    string cadena1= «Esta es»;
    string cadena2= «mi nueva cadena»;
    writer.WriteLine(cadena1);
    writer.Write(cadena2);

    donde writer es una instancia de la calse StreamWriter.

    Saludos y espero que te sirva.

  5. como guardo un archivo de texto en c#
    escribir y guardar

  6. Hola Luis.

    Creo que en la entrada se explica bastante claro…………..

    La plataforma .NET ofrece otras maneras de administrar Streams para hacerle la vida más fácil al desarrollador. Una de esas maneras es utilizar la clase StreamWriter para escribir en archivos y StreamReader para leer desde archivos. Es necesario tener en cuenta que estas clases están orientadas a obtener caracteres como salida a diferencia de las clases que heredan de Stream que están orientadas a obtener bytes.

    Con la clase StreamWriter, solo nos debemos preocupar por utilizar el método Write o WriteLine para escribir datos en un archivo de texto. Estos métodos reciben tipos de datos nativos del lenguaje como por ejemplo int, bool, decimal, float, string, char, etc. Y utiliza el codificador indicado cuando se instancia la clase para codificar los caracteres de salida al archivo de texto. En caso de utilizar un constructor que no especifique algún Encoding, por defecto esta clase opera con el UTF8.

    Si te queda alguna duda, puedes leer la entrada completa.

    Suerte !!!

  7. Como genero un archivo en formato ASCII

    • Hola Andrea

      Es tan simple como usar el constructor de la clase StreamWriter que recibe como parametro el tipo de Encoding en el que queremos formatear el archivo. Asi:

      FileStream stream = new FileStream(«nuevo.txt», FileMode.Create);
      StreamWriter sw = new StreamWriter(new FileStream(), Encoding.ASCII);

      Saludos

  8. una duda como manejarias una agenda de la manera de q esvcriba en un txt los datos siguienets nombre apellido tel edad direccion y por medio de la consola meta los datos¿

    • Pues sin duda alguna si tu opción es manejar esos datos en archivos de texto, te recomiendo hacerlo mediante XmlReader y XmlWriter, las cuales son clases que permiten escribir información en archivos de texto en formato xml y asi poder utilizar archivos de texto como un repositorio de datos.

      Algo que tienes que analizar bien, es la confidencialidad de los datos. Que pasa si alguien tiene acceso a la información, es algo critico?. Si lo es, deberás almacenar los datos encriptados o buscar otro repositorio de datos donde el acceso sea controlado como una base de datos.

      Saludos

  9. hola como estan… solo tengo una dudita… ahora estoy haciendo un proyecto en C#2005 en el cual creo archivos de texto en tiempo de ejecucion… los cuales me interesa leer en otro proceso luego de crearlos… la cuestion es que C# cuando quiero leer el archivo me dice que el archivo que deseo abrir no existe… ya intente solucionarlo pero nada… si me podrian ayudar Gracias de antemano

    • Hola Eduardo,

      Primero que todo asegurate que el proceso que crea el archivo de texto efectivamente lo este creando y que ademas estes cerrando el Stream mediante el cual escribes los datos ya que dicha información no se ve reflejada fisicamente en el archivo hasta que utilices el método Flush o cierrres el Stream.
      Si continuas teniendo problemas con esto, te pido que seas mas especifico y muestres como estas haciendo los procesos para detectar el problema.

      Saludos

  10. Gracias por sus respuestas…. enserio que amables…
    Bueno pues la verdad ya revise si cierro los streams y si lo hago… en realidad es un poco dificil de explicar…

    Lo que estoy haciendo es generar codigo de C++ desde una aplicacion de C#.

    Entonces creo un programa en C++ el cual lo compilo y genera el archivo de texto… ocea el archivo de texto lo genero con codigo de C++… de la siguiente forma…

    FILE* stream;
    stream = fopen(«C:\\output.txt»,»a+»);
    fprintf(stream,mensaje);
    fclose(stream);

    y si genera el archivo… luego de generar este archivo tengo que leerlo desde C#… para mostrar los resultados de los procesos que hago en C++…

    Esta fue la unica forma que encontre de mostrar los resultados del los procesos de C++ en C#…

    entonces desde C# tengo algo asi a grandes razgos…

    CrearYCompilarProgramaCmasmas();
    LeerArchivoGenerado();

    en el metodo de CrearYCompilarProgramaCmasmas(); hago el archivo de texto…
    y luego lo quiero leer con el metodo de LeerArchivoGenerado();

    lo leo de esta forma.

    StreamReader objReader = new StreamReader(«C:\\output.txt»);
    string linea = «»;

    while (linea != null)
    {
    linea = objReader.ReadLine();
    if (linea != null)
    txtOutput.AppendText(linea + «\n»);
    }
    objReader.Close();

    NO se si me di a entender jaja pero eso es lo que hago y cuando quiero leer el archivo me da la excepcion en esta parte:

    StreamReader objReader = new StreamReader(«C:\\output.txt»);

    me dice que no existe el archivo… pero si existe… porque si lo verifique
    Gracias por la ayuda que me puedan brindar

    • Hola Eduardo

      Pues la verdad no se que decirte, aparentemente todo esta bien (por lo menos la parte de lectura desde c#).
      Lo único que se me ocurre es que estes ejecutando eso en un Windows Vista y que te este bloqueando la aplicacion de c# para acceder el C.

      Tambien verifica que puedas acceder mediante un editor de texto al archivo output.txt para descartar posibles errores en el archivo.

  11. ok gracias por contestarme… lo revisare hasta encontrar el problem…

    Gracias de nuevo 🙂

  12. Hola y hay algun metodo de busqueda para encontrar palabras en un archivo binario?

  13. Hola, tengo una cadena de texto separada por comas, ya la puedo ver en la consola y en una aplicación de escritorio. Ahora como debería hacer para sacarle las comas(separadores) al txt? muchas gracias por la ayuda.

    • Puedes utilizar el mtodo Split del objeto String. Ese mtodo recibe como parametro un array de stings que representan los separadores (en tu caso, un array de una posicion que contiene una coma) y te retorna un array de strings como resultado de separar el texto.

      saludos

  14. Mi problema es que tengo un archivo sin formato, pero editable con bloc de notas, y he de recuperar una linea, modificarla y sobreescribirla.
    Alguien me puede ayudar?
    Muchas gracias.

  15. ¿Cómo puedo Leer (y escribir) un fichero de acceso aleatorio tratándolo como si fueran Registros? (Es decir, tengo varios Campos y esos son los que leo y escribo cada vez, o sea, un registro). ¿Tendría que usar el «struct» o no?
    Un saludo y muchas gracias

  16. Excelente el post, muy clarito… Voy a implementar algo de esto, me es muy util
    Me resulta mas sencillo manejar archivos binarios asi
    que en C y C++, por que sera? jaja

    Excelentes aportes y como te lo han dicho en otro post, muy claro y util.
    Espero que puedas seguir agregando post como estos, pues me parece que la ayuda de msdn no se redacta con tanto amor. =)
    jaja Gracias por el aporte
    Exitos

  17. Que tal buen dia, Teno un archivo de texto el cual genero con un programita C# console, en ese archivo doy de alta 10 nombres de personas. Quiero agregar una opcion que permita eliminar cierto nombre de una persona. como puedo hacerlo?

    gracias!

  18. Hola compañero, me han resultado muy útiles tus post sobre c#, y desde ya muchas gracias. Pero ahora necesito si me puedes dar una mano con lo siguiente:

    …Tengo que guardar en un archivo .txt los valores de una matriz que tiene una columna y «n» filas.
    Esta matriz se carga con datos leidos desde el puerto serie. Con lo que puedas ayudarme estare agradecido.

    Saludos!

    pablodflores@yahoo.com.ar

    • Hola Flowers

      Segun lo que entiendo es que necesitas escribir una matriz en un archivo de texto. Eso lo puedes hacer mediante la clase StreamWriter y la instruccion for para recorrer cada fila de la matriz, asi:

      int n = 5;

      int[,] matriz = new int[1, n];

      matriz[0, 0] = 10;

      matriz[0, 1] = 105;

      matriz[0, 2] = 15454;

      matriz[0, 3] = 254;

      matriz[0, 4] = 64887;

      StreamWriter writer = new StreamWriter(«Archivo.txt»);

      for (int i = 0; i < n; i++)

      {

      writer.WriteLine(matriz[0, i].ToString());

      }

      writer.Close();

      En el ejemplo que te puse, tengo una matriz de enteros que la lleno con datos a mi gusto, luego recorro cada fila de la matriz y convierto el dato de la columna 0 en string para escribirlo en el archivo de texto. Eso te dara como resultado un archivo con una linea representando cada fila de tu matriz.

      Espero te sirva.

      Saludos

  19. Hola como esta?, necesito un poquito de su ayuda.
    debo crear un programa que almacene algunos datos como : codigo nombres apellidos curso, nota, y algunas cosas mas. asumo que debo utilizar un struct, correcto?.
    ahora como creo el constructor para enviar la información a un archivo binario aleatorio. y, luego recuperar el dato que yo quiera con el codigo que se ingreso. y lo muestre por pantalla.

    ese proyecto lo quiero hacer en c# modo consola ya que me fascina este tipo de programació. tengo algunas bases de c/c++.
    espero que no sea muy complicado el favor que le estoy pidiendo. de antemano muchas gracias

    • Hola Germnan.

      Pues creo que te va tocar empezar a aprender acerca de la programacion orientada a objetos en c# antes de empezar a trabajar con el tema de almacenamiento y recuperacion de datos. En lugar de usar un struct debes usar clases.

      Con respecto al tema de generacion de archivo binario con un codigo aleatorio, debes utilizar la clase Random que te permite obtener numeros aleatorios basado en una semilla. Una vez obtengas el numero aleatorio, procedes a crear el archivo con ese nombre y almacenas los datos como te explico en el post.

  20. Una ultima pregunta. en modo consoloa con c# puedo acceder a base de datos access,sql etc.
    Sera de la misma forma que vb.net.
    Gracias nuevamente.

    • Hola German

      Por supuesto que puedes acceder a base de datos desde la consola. Simplemente tendras que utilizar el espacio de nombres adecuado basado en el motor de base de datos al cual quieras acceder. Si conoces algo de VB.NET, te puedo decir que es exactamente igual, la estructura en si es la misma, lo unico que cambia es la sintaxis del lenguaje.

      Saludos

  21. 000000000z -vcx sda

    R
    LGF324`12

  22. Gracias tio un gran post y muy bien explicado.

  23. […] Original: Aquí y Gracias a fzapataramirez por este magnifico resumen. Categorías:Desarrollo y […]

  24. Hola!, excelente información.
    En base a lo que decís, deseo enviar un archivo de cualquier extensión por puerto serial, por ahora de poco tamaño (como máximo 500KB).

    ¿Cómo crees que debo hacer?
    Ya tengo montado el envío y recepción de texto.
    Pensaba leer el archivo en binario, envío y recibo los bytes y en el programa receptor, meto los bytes en un archivo y le pongo la extensión original.
    Estos es válido o cómo pudiera ser?. Gracias por la respuesta.

  25. muy interesante la informacion pero tengo una duda. ya puedo escribir y todo, pero al cerrar la aplicacion y volver a abrirla y querer escribir me sobre-escribe el archivo borrando lo que habia antes escrito :S
    hay alguna manera de solucionarlo???

    gracias ^^

    • Hola Eduardo

      Claro que si.

      Tienes que cambiar la forma como creas la instancia del StreamWriter para indicarle que lo que quieres es agregar informacion al archivo y no sobreescribirlo. Asi:

      StreamWriter writer = new StreamWriter(«C:\miarchivo.txt», true);

      El segundo parametro es un booleano y si esta en true indica que se quiere agregar info si el archivo existe. Si esta en false sobreescribe el archivo.

      Saludos

  26. Hola olle amigo estoy haciendo un trabajo final de semestre sobre manejo de archivos y tengo una duda como podria hacer una busqueda en un archivo la idea es que meto los datos con binarywriter y pues es indefinido el numero de registros , son datos como una clave , nombre , categoria y un sueldo lo que quiero es en base a la clave hacer una busqueda dentro del archivo pero no se me ocurre como , de antemano gracias .

  27. Bueno ya lo resolvi =) me resolvio unas dudas tu archivo sobre leer un registro, asi que me empeso a carburar el cerebro y ya tengo la busqueda aunke no me allas resolvido directamente esta duda muchas gracias por que gracicas a textos como estos, es que podemos aprender los novatos .

  28. buenas espero que me ayuden tengo k hacer una agenda y tengo k guardar la informacion del contacto en binario puedo guardar pero cada vez que cierro el programa y meto nuevos datos se sobreescribe como puedo hacer para q no me suceda toy programando en c#
    saludos

    • Utiliza el FileMode.Append cuando crees el Stream para escribir. Esto indica que lo que deseas es agregar informacion al archivo en lugar de sobreescribirlo.

    • utiliza una estructura
      do{
      y dentro de el indica si el usuario desea introducir datos al ar chivo por logica si el di [Si/NO]
      y dentro de el utiliza la estructura
      If()
      {
      Diciendo si no existe en tonces al macenarlo
      }
      else//si no
      {
      indicar k El archivo ya existe
      }

      }while()

  29. Buen dia

    Si tienen informacion de cuales son las caracteristicas que hacen a los archivos binarios unicos les agradeceria que me las proporcionaran?

  30. Bueno en si acabo de leer todo tu tutorial pero como que todavia me queda dudas no se si talvz tengas un msn para poder contactarte y tratar de preguntar todas mis dudas gracias ….

  31. Hola muy bueno este tutorial pero necesito una ayudita necesita leer un txt y asignarle a una matriz entera como hago eso ya hice todo pero no sale
    Gracias de antemano

  32. como se podria guardar, datos que me llegan, por sockets por medio de tcp??
    con que lo haria, gracias de antemano por la respuesta??

  33. Muy bueno el post, pero tengo una consulta como abro un cuadro de dialogo para escoger la ruta donde guardar. Estoy trabajando en web con C#.

    Muchas Gracias por responder.

    • Hola amigo

      Para abrir un dialogo debes utilizar un control web. HTML ofrece uno utilizando el tag input type = file. Sin embargo si estas trabajando con ASP.NET te acosejo utilices el control que ofrece el toolbox de visual studio. Simplemente debes arrastrar el control FileUpload a tu pagina Web y quedar algo como as:

      ** * * *Luego en el code behind puedes acceder al archivo as:* * * *HttpPostedFile mifichero = FileUpload1.PostedFile;

      // Nombre del archivo string nombreFichero = mifichero.FileName;

      puedes utilizar el mtodo SaveAs() para guardar el archivo en un directorio del servidor.*

      Felipe Zapata Ramrez. Ingeniero Informtico. Desarrollador Platino Microsoft DCE 2005. Medelln – Colombia.

  34. Hola, solo quisiera preguntar sobre una duda que tengo, ¿cómo lleno un .txt con una lista enlazada? Saludos

  35. Hola, quisieran que me guíen un poquito, les comento, estoy realizando una aplicación en c#, la misma que trabaja con un método publico y este recibe como parámetro un archivo de texto que deberá contener por ejemplo: nombre, apellido y cédula; teniendo en cuenta que cada fila tiene que estar separada por un TAB, ahora la problemática: nosotros tenemos la información en una base de datos de sql server y quiero ver cual seria el mejor camino para sacar los datos de una tabla e introducirlos en un archivo de texto, luego mandarle en el parámetro del método publico, teniendo en cuenta que podemos hablar hasta de un millón de registros o filas, como podría optimizar al máximo el tiempo con un buen proceso, es decir, cual seria el proceso a tomar en el caso presentado, de ante mano gracias por sus aportes y compartir conocimientos.

  36. Excelente, voy a probar, me soluciona un problema que tengo quiero llevar un Log de errores, gracias por compartir

  37. amm comoevito sobrescribir en un archivo ya creado en c# al volver a iniciar el debug

  38. mmm no ce como programar con archivos es lo que estoy investigando algunos ejemplos y creo que estos seran de utilidad grasias

  39. disculpa mi pregunta es, si los datos d tipo string al guardarlos en un archivo binario quedan igual a como los escribiste?,no hay forma de que se encripte como a las variables enteras,boleanas

  40. Hola amigos me gustaria saber como hacer lo de dar permiso a mi aplicacion que el archivo de registro que es .ini lo grabo en la ruta de la carperta de windows / system32, en xp funciona muy bien, pero el problema esta en windows 7, que me dice que no tiene permiso para escribir.
    La pregunta es como puedo agregar ese permiso desde codigo, lo tengo en vb.net 2010, este es el codigo:
    Public Function crearPropietario(ByVal Licencia As String) As Boolean
    Try
    Dim ruta As String = «C:\WINDOWS\system32\WindoswReg.ini»
    Dim obj As New StreamWriter(ruta, False)
    obj.WriteLine(Licencia)
    obj.Close()
    Return True
    Catch ex As IOException
    Throw New Exception(«Error: » & ex.Message, ex)
    Return False
    Catch ex As Exception
    Throw New Exception(«Error: » & ex.Message, ex)
    Return False
    Finally
    GC.Collect()
    End Try
    End Function

    De antemano muchas gracias a quien me pueda colaborar, lo que necesito es poder dar permiso desde codigo par aque no me genere error al querer grabar el archivo en windows 7 en la carpeta de windows/system32.

  41. hola, una consulta, tengo un hilo en el cual obtengo datos cada un segundo de coordenadas geograficas, y necesito hacer un calculo de area, lo que usaria la formula sig.
    suma += td2.X * _lastLatitude –
    td2.Y * _lastLongitude ;
    la variable td2 es la que tengo simpre actualizada y la variable _lastLatitude es la que no se como hacer para que me mantenga siempre el valor de la lectura anterior,
    algun consejo de como lo puedo hacer?????
    mil gracias
    fabian

  42. asdas

  43. Hola buenos días, tengo una dificultad, estoy utilizando el método WriteLine para copiar ciertas lineas de texto (no todas)de un archivo a otro, lo que sucede es que este metodo No me copia todas las lineas que necesito, es decir, en un caso en el archivo 1 tengo 2000 lineas de texto, de esas 2000 solo necesito 300 lineas, al pasarlas al otro archivo con el método WriteLine, solo me copia 262, que puede estar pasando

    • Asumo que el cdigo no te est arrojando ninguna excepcin porque no lo mencionas. En ese caso, creo que sera problema en la lgica de la aplicacin. Revisa si algn ciclo tiene mal definidas las condiciones de repeticin. Tambin realiza debug y puedes detectar si t cdigo est capturando alguna excepcin.

      Felipe Zapata Ramrez. Ingeniero Informtico. Desarrollador Platino Microsoft DCE 2005. Medelln – Colombia.

  44. am como puedo leer archivos para conectar ala base de datos? ayuda porfavor me urge

    youtube mp3 download

  45. hola. Una pregunta : tengo un archivo xps en memorystream y luego de imprimirlo necesito que se guarde en el disco en una ubicacion determinada.
    Se puede hacer con stream y sus derivados?Aclaro : es una aplicacion WPF .
    gracias

  46. Gracias por el dato.

  47. Hola, Es posible que pueda dividir por ejemplo un archivo de 100 megas y que me lo haga en archivos pequeños, archivos de 10 megas cada uno?

    te agradeceria mucho si me apoyaras con esto, o si sabes de algun otra libreria.

    saludos

  48. Hola me podrian ayudar con como le un archivo txt con muchos rgistros sin que se tarde mucho, ya que mi archivo es muy pesado y se tarda aproximadamente 6 dias en leer todos los registros tomar algunos y escribirlos en otros archivo, como automatizo esto?

  49. hola tengo un peque*o problema es que estoy leyendo archivos binarios el tama*o del vector es de 2048 bytes pero el ultimo bit es peque*o 450 y no lo escribe porfa si alquien me puede ayudar se lo agradesco …

  50. Buenas, amigo.
    Tengo una duda, estoy encriptando información, y tengo algo que pasa:
    a) Cuando uso la encriptación y desencriptación en objetos de textos me funciona perfecto.
    b) Cuando generar la encriptación y las guardo sea con el método FileStream / File.WriteAllText / File.WriteAllByte se guardan. Pero al leerlas y extraer la información y pasarlas luego a desencriptación me arroja un error «Datos no correctos».

    Que puede estar pasando? Pensaba que era por el \r\n desde el archivo, y no pasan esos caracteres. Y aun no consigo como realizar la lectura de forma correcta.

    Gracias.

  51. tengo un programa en c# que captura los datos de un sensor,estoy utilizando una raspberry pi,el sensor muestra en pantalla si hay un objeto cerca o lejos quiero guardar los datos en un archivo .txt, como lo puedo guardar..muchas gracias al que me pueda colaborar

  52. vibrating pocket pussy


Deja un comentario

Categorías