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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Borrar bytes de archivo y guardar
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Borrar bytes de archivo y guardar  (Leído 10,654 veces)
Mr. God

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Borrar bytes de archivo y guardar
« en: 3 Abril 2010, 14:54 pm »

Hola, que tal?? Quería comentarles mi duda, a ver si saben ayudarme  :xD

A ver, quiero que al pulsar un botón se abra un archivo (que sé hacerlo, con un OpenFileDialog) y que se borre automaticamente un numero de bytes del principio del archivo (en concreto 14 bytes), y que una vez hecho, se guarde el archivo con los bytes eliminados.

cualquier ayuda o pista me viene genial :):):):)

P.D. El lenguaje es vb.net ^^

Salu2!!!


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Borrar bytes de archivo y guardar
« Respuesta #1 en: 3 Abril 2010, 15:14 pm »

Usa el namespace System.IO y la clase streamReader y streamWriter
ahora, una pregunta, quieres que sea del mismo tamaño (14 bytes vacios al principio) o sin los 14 bytes del principio? es medio existencial mi duda jeje

igual, de todas formas seria algo asi (es codigo hecho al vuelo, puede que haya mas de un error :xD)

Código
  1. StreamReader archivoOriginal = File.Open("archivo", FileMode.Open);
  2.  
  3. // Para escribir el mismo archivo sin las primeras 14 lineas
  4. archivoOriginal.Seek(14, SeekOrigin.Begin); // Mueve al byte 14
  5.  
  6. StreamWriter archivoDestino = File.Open("archivoNuevo", FileMode.CreateNew);
  7.  
  8. // --- Para escribir 14 bytes vacios al principio agrega esto -------
  9. int bytes[] = new int[14];
  10. for (int i = 0; i < bytes.Length; i++)
  11.    bytes[i] = 0;
  12.  
  13. archivoDestino.Write(bytes);
  14. archivoDestino.Flush();
  15. // -----------------------------------------------------------------------
  16.  
  17. archivoDestino.Write(archivoOriginal.ReadToEnd());
  18. archivoDestino.Flush();
  19. archivoDestino.Close();
  20. archivoOriginal.Close();
  21.  

Espero que te sirva!!!


En línea

Mr. God

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Borrar bytes de archivo y guardar
« Respuesta #2 en: 3 Abril 2010, 15:51 pm »

Gracias por la respuesta jeje  ;D ;D

La cosa es sin los 14 bytes del principio :) En un principio lo iba a hacer en vb.net, aunque también se algo de C# (Pero bastante poco, al contrario que de vb.net), y me tira 2 errores, que no se puede convertir System.IO.FileStream en System.IO.StreamReader/StreamWriter, y que IO.StreamReader no contiene una definición de Seek.

Por supuesto, añadí "using System.IO;"

Dejé el code así:

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Bytes
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StreamReader archivoOriginal = File.Open("archivo", FileMode.Open);

            archivoOriginal.Seek(14, SeekOrigin.Begin);
 
StreamWriter archivoDestino = File.Open("archivoNuevo", FileMode.CreateNew);
 
 
archivoDestino.Write(archivoOriginal.ReadToEnd());
archivoDestino.Flush();
archivoDestino.Close();
archivoOriginal.Close();
 
 
        }
    }
}

El fallo da en los Seek y en los File.Open()


gracias de nuevo y saludos!!
« Última modificación: 3 Abril 2010, 19:36 pm por Mr. God » En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Borrar bytes de archivo y guardar
« Respuesta #3 en: 3 Abril 2010, 20:12 pm »

A la rapida puede ser asi:

Código
  1. byte[] leer = File.ReadAllBytes("C:\\1.txt");
  2. FileStream fstream = new FileStream("C:\\2.txt", FileMode.Create, FileAccess.Write);
  3. BinaryWriter escribir = new BinaryWriter(fstream);
  4. for(int i=15;i<leer.Length;i++)
  5.   {
  6.       escribir.Write(leer[i]);
  7.    }
  8. escribir.Close();
  9. fstream.Close();

Funcionaría con *.exe u otros que necesites.
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
Mr. God

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Borrar bytes de archivo y guardar
« Respuesta #4 en: 3 Abril 2010, 20:45 pm »

Perfecto  ;D ;D muchas gracias, 43H4FH44H45H4CH49H56H45H, le hice unos arreglos para complementarlo con openFileDialog y saveFileDialog y perfecto

tambien dar las gracias a Raul por su anterior ayuda.  :)
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Borrar bytes de archivo y guardar
« Respuesta #5 en: 3 Abril 2010, 21:01 pm »

Código
  1. // Crea un archivo
  2. private void button1_Click(object sender, EventArgs e)
  3. {
  4.    StreamWriter sw = new StreamWriter(Application.StartupPath + Path.DirectorySeparatorChar + "archivo.txt", false);
  5.    sw.Write("".PadLeft(50, '5'));
  6.    sw.Flush();
  7.    sw.Close();
  8. }
  9.  
  10. // Le saca los primeros 14 bytes y los pone en otro archivo
  11. private void button2_Click(object sender, EventArgs e)
  12. {
  13.    FileStream sr = File.Open(Application.StartupPath + Path.DirectorySeparatorChar + "archivo.txt", FileMode.Open);
  14.    sr.Seek(14, SeekOrigin.Begin);
  15.    FileStream sw = File.Open(Application.StartupPath + Path.DirectorySeparatorChar + "archivo2.txt", FileMode.Create);
  16.    while (sr.Position != sr.Length)
  17.        sw.WriteByte(Convert.ToByte(sr.ReadByte()));
  18.    sr.Close();
  19.    sw.Close();
  20. }
  21.  

Funciona, y espero que te sirva :)

EDIT: no vi la anterior respuesta, esta desarrondo la mia jaja
Ese convert.ToByte esta porque extrañamente ReadByte devuelve un integer :¬¬

Espero que las 2 respuestas te sirvan :)
« Última modificación: 3 Abril 2010, 21:03 pm por raul338 » En línea

Mr. God

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Borrar bytes de archivo y guardar
« Respuesta #6 en: 4 Abril 2010, 16:06 pm »

Gracias Raul por la nueva respuesta jeje  ;D

si no es mucha molestia, me gustaria preguntar como hacerle un pequeño añadido al programa. Es que se añada una frase que está en el offset 0000004D y que acaba en el offset 00000055 un numero X de veces (4 veces, por ejemplo), y esas frase deben empezar justamente debajo del offset 00000055, es decir, en el 00000056 y acabar donde acaben, y que después de esas frases se guarde el archivo con el mismo contenido que el original, menos los bytes quitados del principio del archivo (que ya está hecho jeje) y esas frases de más. Al final dará un archivo más grande que el original.

se que es lioso, pero seria genial que pudiesen ayudarme, si nopueden, lo entiendo jeje

salu2!!
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Borrar bytes de archivo y guardar
« Respuesta #7 en: 4 Abril 2010, 18:24 pm »

:| no entendi, lo que quieres hacer es sobreescribir un archivo entre tal y tal bytes?.... seria lo mismo, usa seek(poscicionByteInicial, seekOrigin.Begin) y escribe tu frase (Usa System.Encoding.ASCII.GetBytes para obtener un array de bytes de la frase) y si la frase no llega a completar el bloque (supongamos, son 10 bytes reservados y tu solo llenas 4), escribe los bytes sobrantes con bytes nulos (0)

En línea

Mr. God

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Borrar bytes de archivo y guardar
« Respuesta #8 en: 4 Abril 2010, 19:36 pm »

Jeje, a ver, me refiero a esto: (a ver si ahora logras entendero :D :D)

1º Obtener una frase de un offset con inicio 0000004D y fin 00000055
2º Copiar esa misma frase 4 veces debajo del offset de finalización de la frase, es decir, a partir del 00000056, de modo que si el archivo original fuese:

Código:
"Hola, como andan? Yo bien, ¿y tú?"


donde la H de Hola corresponde al offset 0000004D y la ? fuese el 00000055 (es un ejemplo). Con lo que me gustaría hacer, deberia de quedar así:

Código:
"Hola, como andan?Hola, como andan?Hola, como andan?Hola, como andan?Hola, como andan?Yo bien, ¿y tú?"

por lo que el archivo se agrandaría, basicamente eso es lo que quiero jeje  ;D

salu2 y gracias!!

« Última modificación: 4 Abril 2010, 19:39 pm por Mr. God » En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Borrar bytes de archivo y guardar
« Respuesta #9 en: 5 Abril 2010, 03:03 am »

Solo es modificar un poco el code:

Código
  1. byte[] leer = File.ReadAllBytes("C:\\1.txt");
  2. FileStream fstream = new FileStream("C:\\2.txt", FileMode.Create, FileAccess.Write);
  3. BinaryWriter escribir = new BinaryWriter(fstream);
  4. int control = 0;
  5. for (int i = 0; control < 4; i++)
  6. {
  7.   if (i == 17)
  8.      {
  9.         control++;
  10.          i = 0;
  11.       }
  12.    escribir.Write(leer[i]);
  13. }
  14. for (int i1 = 1; i1 < leer.Length; i1++)
  15. {
  16.    escribir.Write(leer[i1]);
  17. }
  18. escribir.Close();
  19. fstream.Close();

Falta mejorar pero sirve de ejemplo  :silbar:

Archivo Original
Código:
Hola, como andan? Yo bien, ¿y tú?
Archivo Nuevo
Código:
Hola, como andan?Hola, como andan?Hola, como andan?Hola, como andan?Hola, como andan? Yo bien, ¿y tú?
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines