elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema en c# con lectura y escritura en un archivo de texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema en c# con lectura y escritura en un archivo de texto  (Leído 4,521 veces)
Andesat

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Problema en c# con lectura y escritura en un archivo de texto
« en: 3 Abril 2015, 20:54 pm »

Sucede que he estado aprendiendo c# y estoy dando apenas los primeros pasos. Buscando por ahí me encontre con un ejercicio que me parecía sencillo pero me he estancado :-[ y no estoy muy seguro de como resolverlo.

El ejercicio consistía en establecer un entero como contador, leer un documento de texto y copiar el contenido de este dentro de otro documento de texto, por cada quince caracteres copiados el contador disminuye en uno y al llegar a cero la copia se detiene durante cinco segundos.

Ahora viene en donde me da problemas. Una vez terminados los cinco segundos, el contador vuelve al valor original continua la copia de texto y si esta no se terminó, debe retomarla desde donde quedó la última vez y seguir copiado hasta que el contador llegue a cero nuevamente o hasta que termine de copiar, lo que suceda primero ypor ultimo avisar si la copia terminó.

No se como hacer para que empiece a copiar desde donde quedó y la verdad no quisiera dejar esto sin hacer despues de haberme interesado.

Estoy usando c# 5.0 en visual studio 2012.

Agradecería la ayuda ;D


En línea

Un hombre sabio puede aprender más de una pregunta absurda que un tonto puede aprender de una respuesta sabia
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Problema en c# con lectura y escritura en un archivo de texto
« Respuesta #1 en: 3 Abril 2015, 21:31 pm »

Creo que si pones el código de lo que tienes hecho te podríamos ayudar más. Porque así me vienen varias cosas a la mente, pero sabiendo lo que tienes hecho te podría ayudar de una manera más concisa

Salu2s


En línea

Andesat

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: Problema en c# con lectura y escritura en un archivo de texto
« Respuesta #2 en: 4 Abril 2015, 00:13 am »

Claro!
Disculpa la demora es que hubo un apagón.

Código
  1.            Console.WriteLine("Ingrese ruta del archivo de origen: ");
  2.            string rutaO = Console.ReadLine();
  3.  
  4.            Console.WriteLine("Ingrese ruta del archivo de destino: ");
  5.            string rutaD = Console.ReadLine();
  6.  
  7.            Console.WriteLine("Ingrese el contador: ");
  8.            int cont = int.Parse(Console.ReadLine());
  9.  
  10.            StreamReader sr = new StreamReader(rutaO);
  11.            string contenido = sr.ReadToEnd();
  12.            sr.Close();
  13.  
  14.            StreamWriter sw = new StreamWriter(rutaD, true);
  15.  
  16.  
  17.            while (cont > 0)
  18.            {
  19.                for (int i = 0; i < 15; i++)
  20.                {
  21.                    char Caracter = contenido[i];
  22.                    sw.Write(Caracter);
  23.                }
  24.                cont--;
  25.            }
  26.  
  27.            Console.ReadKey();

Esto es lo que intenté hacer al final pero no me funcionó
« Última modificación: 4 Abril 2015, 01:14 am por Eleкtro » En línea

Un hombre sabio puede aprender más de una pregunta absurda que un tonto puede aprender de una respuesta sabia
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Problema en c# con lectura y escritura en un archivo de texto
« Respuesta #3 en: 4 Abril 2015, 01:11 am »

No vas del todo mal encaminado, aunque también podrías hacerlo con una pila de caracteres.

Te muestro una posible solución siguiendo el enfoque que le has dado, puedes trasladarlo a tu aplicación de consola.

VB.Net:
Código
  1. Imports System.IO
  2. Imports System.Text
  3. Imports System.Threading.Interlocked
  4. Imports System.Threading.Thread
  5.  
  6. Public Class Form1
  7.  
  8.    Private Sub Test() Handles MyBase.Shown
  9.  
  10.        Writer(sourceFilepath:="C:\Source.txt",
  11.               targetFilepath:="C:\Target.txt",
  12.               maxChars:=15,
  13.               sleepCount:=3,
  14.               sleepInterval:=5 * 1000)
  15.  
  16.    End Sub
  17.  
  18.    Public Sub Writer(ByVal sourceFilepath As String,
  19.                      ByVal targetFilepath As String,
  20.                      ByVal maxChars As Integer,
  21.                      ByVal sleepCount As Integer,
  22.                      ByVal sleepInterval As Integer)
  23.  
  24.        Dim cloneSleepCount As Integer = sleepCount
  25.  
  26.        Dim charCount As Integer = -1
  27.        Dim sr As StringReader = New StringReader(File.ReadAllText(sourceFilepath, Encoding.Default))
  28.        Dim sw As New StringWriter
  29.  
  30.        Do Until (sr.Peek = -1)
  31.  
  32.            sw.Write(Convert.ToChar(sr.Read))
  33.  
  34.            If (Increment(charCount) = maxChars) OrElse (sr.Peek = -1) Then
  35.  
  36.                If Decrement(cloneSleepCount) = 0 Then
  37.                    Debug.WriteLine(String.Format("Deteniendo por {0} ms...", sleepInterval))
  38.                    Sleep(sleepInterval)
  39.                    cloneSleepCount = sleepCount - 1
  40.                End If
  41.  
  42.                Debug.WriteLine(String.Format("Copiando {0} caracteres: '{1}'", charCount, sw.ToString))
  43.                File.AppendAllText(targetFilepath, sw.ToString, Encoding.Default)
  44.  
  45.                charCount = -1
  46.                sw.GetStringBuilder.Clear()
  47.  
  48.            End If
  49.  
  50.        Loop
  51.  
  52.        sr.Close()
  53.        sw.Close()
  54.        Debug.WriteLine("Copia terminada.")
  55.  
  56.    End Sub
  57.  
  58. End Class

Traducción online a C#:
Código
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Text;
  5. using System.Threading.Interlocked;
  6. using System.Threading.Thread;
  7.  
  8. public class Form1
  9. {
  10.  
  11. private void Test()
  12. {
  13. Writer(sourceFilepath: "C:\\Source.txt", targetFilepath: "C:\\Target.txt", maxChars: 15, sleepCount: 3, sleepInterval: 5 * 1000);
  14. }
  15.  
  16. public void Writer(string sourceFilepath, string targetFilepath, int maxChars, int sleepCount, int sleepInterval)
  17. {
  18. int cloneSleepCount = sleepCount;
  19.  
  20. int charCount = -1;
  21. StringReader sr = new StringReader(File.ReadAllText(sourceFilepath, Encoding.Default));
  22. StringWriter sw = new StringWriter();
  23.  
  24. while (!((sr.Peek == -1))) {
  25.  
  26. sw.Write(Convert.ToChar(sr.Read));
  27.  
  28. if ((Increment(charCount) == maxChars) || (sr.Peek == -1)) {
  29.  
  30. if (Decrement(cloneSleepCount) == 0) {
  31. Debug.WriteLine(string.Format("Deteniendo por {0} ms...", sleepInterval));
  32. Sleep(sleepInterval);
  33. cloneSleepCount = sleepCount - 1;
  34. }
  35.  
  36. Debug.WriteLine(string.Format("Copiando {0} caracteres: '{1}'", charCount, sw.ToString));
  37. File.AppendAllText(targetFilepath, sw.ToString, Encoding.Default);
  38.  
  39. charCount = -1;
  40. sw.GetStringBuilder.Clear();
  41. }
  42. }
  43.  
  44. sr.Close();
  45. sw.Close();
  46. Debug.WriteLine("Copia terminada.");
  47. }
  48. }
  49.  
  50. //=======================================================
  51. //Service provided by Telerik (www.telerik.com)
  52. //=======================================================

Saludos
« Última modificación: 4 Abril 2015, 01:13 am por Eleкtro » En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Problema en c# con lectura y escritura en un archivo de texto
« Respuesta #4 en: 4 Abril 2015, 02:59 am »

Bueno, siguiendo de acuerdo al código que ya escribiste, te voy a tratar de explicar lo que puedes hacer.

Lo que tenías está bastante bien. Verás en el siguiente código, una manera diferente de usar los StreamReadery StreamWriter, te explico.

Utilizando el using, garantizamos que el stream se cree y a la vez dentro del ámbito del using este abierto, luego que se salga de ese ámbito, el stream automáticamente se cierra. Gracias a esta funcionalidad podemos hacer uso del método Peek() que te devuelve el próximo caracter disponible (sin consumirlo), este método devuelve un int, entonces devuelve -1 si no hay chars para leer por lo tanto utilizamos eso para controlar el ciclo, ahora, este puntero es modificado por varios métodos de la clase StreamReader. Como por ejemplo el que utilicé: ReadBlock(). El cuál recibe varios parámetros, un array de char (char[]), el cuál va a servir como un buffer para ir almacenando en este caso los 15 chars leídos (debes declararlo e iniciarlo previamente como verás en el código. El otro parámetro es la posición en cual va a comenzar a copiar los chars en el buffer, en este caso 0, para que sea desde el principio. Y por último, la cantidad de chars a leer del fichero, 15 en este caso.

Luego la otra linea se ejecuta sobre el StreamWriter, es el método Write(), el cual tiene varias sobrecargas (varias definiciones del método donde cambian los tipos de parámetros y/o la cantidad). En particular tiene una que recibe un array de char (char[]), o sea un buffer. Por lo tanto le pasamos el buffer que teníamos anteriormente y el escribirá en el StreamWriter los chars en ese array.

Por ultimo, tienes que añadir a los usings de tu aplicación:

Código
  1. using System.Threading;

para poder hacer uso del método estático

Código
  1. Thread.Sleep(5000);

Donde 5000 significan los 5s, pues el método recibe como parámetro un int que son la cantidad de milisegundos que te va a suspender el hilo actual (esperar).

Aquí te dejo el código:

Código
  1. Console.WriteLine("Ingrese ruta del archivo de origen: ");
  2.            string rutaO = Console.ReadLine();
  3.  
  4.            Console.WriteLine("Ingrese ruta del archivo de destino: ");
  5.            string rutaD = Console.ReadLine();
  6.  
  7.            Console.WriteLine("Ingrese el contador: ");
  8.            int cont = int.Parse(Console.ReadLine());
  9.  
  10.            using (StreamReader sr = new StreamReader(rutaO))
  11.            {
  12.                using(StreamWriter sw = new StreamWriter(rutaD))
  13.            {
  14.                    int i = cont;
  15.  
  16.                        while (sr.Peek() != -1)
  17.                        {
  18.                            if (i == 0)
  19.                            {
  20.                                Thread.Sleep(5000);
  21.                                i = cont;
  22.                            }
  23.                            char[] buffer = new char[15]; //creamos e inicializamos el array de char para usarlo como buffer
  24.                            sr.ReadBlock(buffer, 0, 15); //Lee y copia en el buffer desde el StreamReader
  25.                            sw.Write(buffer); //Escribe en el StreamWriter desde el buffer
  26.                            i--;
  27.                        }
  28.  
  29.            }
  30.            }

Espero lo hayas entendido todo, trate de explicarte lo mejor posible.
Dinos como te funcionó.

Saludos
« Última modificación: 4 Abril 2015, 03:04 am por DarK_FirefoX » En línea

Andesat

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: Problema en c# con lectura y escritura en un archivo de texto
« Respuesta #5 en: 4 Abril 2015, 04:50 am »

Gracias a todos por tomarse el tiempo para responder a mi pregunta!

DarK_FirefoX, todo esta muy bien explicado, y funciona perfecto para lo que estoy haciendo.

He aprendido algo nuevo hoy, muchas gracias.

Saludos.
« Última modificación: 4 Abril 2015, 05:40 am por Andesat » En línea

Un hombre sabio puede aprender más de una pregunta absurda que un tonto puede aprender de una respuesta sabia
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Problema en c# con lectura y escritura en un archivo de texto
« Respuesta #6 en: 4 Abril 2015, 14:52 pm »

Gracias a todos por tomarse el tiempo para responder a mi pregunta!

DarK_FirefoX, todo esta muy bien explicado, y funciona perfecto para lo que estoy haciendo.

He aprendido algo nuevo hoy, muchas gracias.

Saludos.

Un placer!, que bueno que todo se haya entendido. Cualquier otra duda, ya sabes ;)
Salu2s
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con la lectura y escritura de un arxivo
Programación Visual Basic
bautistasbr 1 1,818 Último mensaje 30 Agosto 2006, 17:47 pm
por bautistasbr
Problema escritura objetos en archivo
Java
panaka 3 4,448 Último mensaje 20 Febrero 2010, 19:02 pm
por Leyer
Problema en codigo. Escritura y Lectura de un archivo secuencial
Programación C/C++
traviatØ 1 3,317 Último mensaje 26 Octubre 2012, 17:17 pm
por rir3760
lectura y escritura de ficheros
Programación C/C++
franfis 6 3,552 Último mensaje 20 Abril 2013, 19:16 pm
por cypascal
Lectura y escritura en Archivos
Programación C/C++
Swastik 3 2,376 Último mensaje 8 Febrero 2015, 01:00 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines