Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Kaxperday en 17 Abril 2015, 20:47 pm



Título: Ayudilla para archivos C#
Publicado por: Kaxperday en 17 Abril 2015, 20:47 pm
Código
  1. StreamReader reader = new StreamReader(directorio + "\\Temas.txt");
  2.                StreamReader readel = new StreamReader(directorio + "\\Respuestas.txt");
  3.  
  4.                if (aleatoriedad == 1)
  5.                {
  6.                    int i=0;
  7.                    while (reader.Peek()>=0)
  8.                    {
  9.                        linea = reader.ReadLine();
  10.                        mensaje = readel.ReadLine();
  11.                        if(mensaje=="")//reinicia el puntero al inicio
  12.                        {
  13.                            readel.BaseStream.Position = 0;
  14.                            readel.DiscardBufferedData();
  15.                        }
  16.                        MessageBox.Show("LINEA: "+linea+ "MENSAJE: "+mensaje);
  17.                    }
  18.                    reader.Close();
  19.                    readel.Close();

La primera iteracion lee la primera linea de los archivos correctamente, pero luego no funciona ¿?? que pasa, es horrible programar para archivos en C#, luego se quejan de C.

Gracias socios.


Título: Re: Ayudilla para archivos C#
Publicado por: jaxoR en 17 Abril 2015, 21:48 pm
Código
  1. while (reader.Peek()>=0)

----------->

Código
  1. while ((reader.Peek() != -1))
  2. {
  3.    linea = reader.ReadLine();
  4.    using (StringReader sr = new StringReader(linea))
  5.    {

Yo siempre lo trabajé así. Prueba!


Título: Re: Ayudilla para archivos C#
Publicado por: kub0x en 17 Abril 2015, 22:53 pm
Mejor comprueba la propiedad "EndOfStream" del objeto StreamReader ya que nos indica si llegamos al EOF o final del archivo.

Código
  1. while (!reader.EndOfStream) //Mientras no hayamos llegado al final del archivo
  2.    Console.WriteLine(reader.ReadLine()); //Imprimos una línea

es horrible programar para archivos en C#, luego se quejan de C.

Perdona grrr pero no hables sin saber ;D En C todo es más primitivo, otra cosa sería C++ aun así comparándolo con C# es inferior en funcionalidad nativa o "por defecto" ya que el Framework te abstrae de muchos procesos que en C++ no están implementados (se arregla descargando libs de terceros o implementando dichas funcionalidades tu mismo). Ojo que programo más en C++ que en .NET (VB/C#) pero C# por defecto te trae una gran cantidad de librerías directas para usar ;)

Saludos.


Título: Re: Ayudilla para archivos C#
Publicado por: Eleкtro en 17 Abril 2015, 23:00 pm
es horrible programar para archivos en C#, luego se quejan de C.

¿Te das cuenta que basas tu crítica en el desconocimiento del lenguaje?, no es cierto lo que dices, para ti es "horrible" solamente por que no sabes cómo hacerlo, eso no significa que sea más dificil que en C/C++, y además, hay formas más simples para leer un archivo de cómo lo estás intentando, pero no puedo mostrártelo sin saber exactamente que intentas hacer con 2 archivos al mismo tiempo.

Si quieres leer un archivo de principio a fin, linea por linea, en lugar de basar tu evaluación en el siguiente caracter, utiliza el loop para evaluar la propiedad StreamReader.EndOfStream

Código
  1. string themFilepath = Path.Combine(dirPath, "Temas.txt");
  2. string respFilepath = Path.Combine(dirPath, "Respuestas.txt");
  3.  
  4. string themLine = string.Empty;
  5. string respLine = string.Empty;
  6.  
  7. StreamReader themSR = new StreamReader(themFilepath);
  8. StreamReader respSR = new StreamReader(respFilepath);
  9.  
  10. while (!(themSR.EndOfStream)) {
  11.  
  12.    themLine = themSR.ReadLine;
  13.    respLine = respSR.ReadLine;
  14.  
  15.    // ...
  16.  
  17. }


Título: Re: Ayudilla para archivos C#
Publicado por: Kaxperday en 18 Abril 2015, 00:48 am
Bueno gracias por las respuestas, si antes lo tenia asi con el EndOfStream, estuve cambiando bastante código y pensé que era fallo del bucle por eso lo cambie.

Mirad!!! Me pasa una cosa muy curiosa, como pensaba que el fallo que os voy a explicar ahora era tema del StreamReader hice el siguiente code:

Código
  1. FileStream readerTemas = new FileStream(directorio + "\\Temas.txt", FileMode.Open, FileAccess.Read);
  2.            FileStream readerRespuestas = new FileStream(directorio + "\\Respuestas.txt", FileMode.Open, FileAccess.Read);do
  3.                {
  4.                    Random r = new Random(DateTime.Now.Millisecond);
  5.                    URL = ""; respuesta = "";
  6.                    do
  7.                    {
  8.                        caracter = (char)(byte)readerTemas.ReadByte();
  9.                        if (caracter == '\n')
  10.                            break;
  11.                        URL += caracter;
  12.                    } while (caracter != '\n');
  13.                    do
  14.                    {
  15.                        caracter = (char)(byte)readerRespuestas.ReadByte();
  16.                        if (caracter == '\n')
  17.                            break;
  18.                        respuesta += caracter;
  19.                    } while (caracter != '\n');
  20.  
  21.                    MessageBox.Show("url: " + URL + Environment.NewLine + "respuesta:" + respuesta);

Y bien es gracioso, funciona igual que lo hacía el streamreader, con el fallo igual.

La primera ejecucion muestra la primera linea de cada archivo, la segunda muestra nada en URL, y en respuesta si hay contenido, la tercera muestra contenido en URL (el de la segunda linea) y hay contenido en respuesta respectivo a su iteracion del bucle, la cuarta URL no muestra nada, y respuesta sigue mostrandose de acuerdo a su linea.

En fin Temas.txt recoge el contenido de la linea solo en las interacciones impares, y en Respuestas.txt funciona con normalidad WTF, este error lo llevaba arrastrando de tiempo y no sabia como solucionarlo, por eso deje de lado el StreamReader y pase a filestream pero ocurre igual.

El archivo solo se usa ahi para lectura, las demas veces que se una se cierra bien y su contenido con lineas con urls, pero al leer solo le lee en impares no se porque  :rolleyes: :rolleyes: :-*

Con el streamreader para solucionar ese error hice lo siguiente:

Código
  1. while (!reader.EndOfStream)
  2.                {
  3.                    j++;
  4.                    if (j % 2 == 0)
  5.                    {
  6.                        linea = reader.ReadLine();
  7.                        linea = reader.ReadLine();
  8.                    }
  9.                    else
  10.                    {
  11.                        linea = reader.ReadLine();
  12.                    }
  13.                    mensaje = readel.ReadLine();
  14.                    if (linea == "" || mensaje == "")
  15.                    {
  16.                        break;
  17.                    }
  18.  

edito: en lo de C# que es dificil y tal que es mejor C, pues que queréis que os diga mirad como se abre un fichero en C 2 lineas, y en C# tambien 2 lineas pero otros tantas opciones y instancias para abrirlos que lo hacen muy engorroso todo, si fuese C no tendría estos probleas, puede que sea por desconocimiento, pero eso de using, buffers.... en fin para mi lo hace muy complejo aunque mas completo.

Gracias por estar ayudando gente <3