Autor
|
Tema: Borrar bytes de archivo y guardar (Leído 10,601 veces)
|
Mr. God
Desconectado
Mensajes: 6
|
Hola, que tal?? Quería comentarles mi duda, a ver si saben ayudarme 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
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
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 ) StreamReader archivoOriginal = File.Open("archivo", FileMode.Open); // Para escribir el mismo archivo sin las primeras 14 lineas archivoOriginal.Seek(14, SeekOrigin.Begin); // Mueve al byte 14 StreamWriter archivoDestino = File.Open("archivoNuevo", FileMode.CreateNew); // --- Para escribir 14 bytes vacios al principio agrega esto ------- int bytes [] = new int[14]; for (int i = 0; i < bytes.Length; i++) bytes[i] = 0; archivoDestino.Write(bytes); archivoDestino.Flush(); // ----------------------------------------------------------------------- archivoDestino.Write(archivoOriginal.ReadToEnd()); archivoDestino.Flush(); archivoDestino.Close(); archivoOriginal.Close();
Espero que te sirva!!!
|
|
|
En línea
|
|
|
|
Mr. God
Desconectado
Mensajes: 6
|
Gracias por la respuesta jeje 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í: 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
Mensajes: 502
|
A la rapida puede ser asi: byte[] leer = File.ReadAllBytes("C:\\1.txt"); FileStream fstream = new FileStream ("C:\\2.txt", FileMode .Create, FileAccess .Write);BinaryWriter escribir = new BinaryWriter (fstream );for(int i=15;i<leer.Length;i++) { escribir.Write(leer[i]); } escribir.Close(); 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
Mensajes: 6
|
Perfecto 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
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
// Crea un archivo private void button1_Click(object sender, EventArgs e) { StreamWriter sw = new StreamWriter (Application .StartupPath + Path .DirectorySeparatorChar + "archivo.txt", false); sw.Write("".PadLeft(50, '5')); sw.Flush(); sw.Close(); } // Le saca los primeros 14 bytes y los pone en otro archivo private void button2_Click(object sender, EventArgs e) { FileStream sr = File.Open(Application.StartupPath + Path.DirectorySeparatorChar + "archivo.txt", FileMode.Open); sr.Seek(14, SeekOrigin.Begin); FileStream sw = File.Open(Application.StartupPath + Path.DirectorySeparatorChar + "archivo2.txt", FileMode.Create); while (sr.Position != sr.Length) sw.WriteByte(Convert.ToByte(sr.ReadByte())); sr.Close(); sw.Close(); }
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
Mensajes: 6
|
Gracias Raul por la nueva respuesta jeje 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
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
:| 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
Mensajes: 6
|
Jeje, a ver, me refiero a esto: (a ver si ahora logras entendero ) 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: "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í: "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 salu2 y gracias!!
|
|
« Última modificación: 4 Abril 2010, 19:39 pm por Mr. God »
|
En línea
|
|
|
|
43H4FH44H45H4CH49H56H45H
Wiki
Desconectado
Mensajes: 502
|
Solo es modificar un poco el code: byte[] leer = File.ReadAllBytes("C:\\1.txt"); FileStream fstream = new FileStream ("C:\\2.txt", FileMode .Create, FileAccess .Write);BinaryWriter escribir = new BinaryWriter (fstream );int control = 0; for (int i = 0; control < 4; i++) { if (i == 17) { control++; i = 0; } escribir.Write(leer[i]); } for (int i1 = 1; i1 < leer.Length; i1++) { escribir.Write(leer[i1]); } escribir.Close(); fstream.Close();
Falta mejorar pero sirve de ejemplo Archivo Original Hola, como andan? Yo bien, ¿y tú? Archivo Nuevo 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda a leer y modificar Bytes de un Archivo
.NET (C#, VB.NET, ASP)
|
adan-2994
|
4
|
6,288
|
7 Agosto 2011, 02:52 am
por adan-2994
|
|
|
Bytes escritos al reves en archivo
Programación C/C++
|
erickgracia
|
2
|
2,293
|
22 Abril 2016, 23:49 pm
por erickgracia
|
|
|
Convertir Cadena Hex a Bytes y compararlos Con Bytes de un archivo
.NET (C#, VB.NET, ASP)
|
**Aincrad**
|
3
|
3,171
|
14 Octubre 2018, 00:52 am
por Eleкtro
|
|
|
Duda - ¿Que sucede con un archivo infectado por virus a nivel de bytes?
Dudas Generales
|
devmasterangel
|
5
|
2,839
|
13 Marzo 2020, 02:46 am
por devmasterangel
|
|
|
fread modifica algunos bytes tratando de volcar parte de un archivo en otro
Programación C/C++
|
@XSStringManolo
|
7
|
5,869
|
11 Agosto 2021, 19:52 pm
por Danielㅤ
|
|