Borrar bytes de archivo y guardar

Iniciado por Mr. God, 3 Abril 2010, 14:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Mr. God

#10
Jeje, ahora ya casi perfecto, en un principio la cosa era que copiase los 17 bytes que están en una  posición en concreto, es decir, desde el byte 93 (Offset 0000004D) del archivo hasta el byte 110 (Offset 0000005C) y los copiase debajo del 110, si ya por ultimo me pueden ayudar con eso seria genial :D

p.d. he probado desplazándome con Seek, pero me da fallo... en C# soi bastante novatillo jeje  :-X :-X

raul338

Código (csharp) [Seleccionar]

// Generamos el archivo
StreamWriter sw = new StreamWriter(Application.StartupPath + Path.DirectorySeparatorChar + "archivo3.txt", false);
sw.Write("".PadLeft(93) + "Hola, esto es un ejemplo" + "".PadLeft(100, '0'));
sw.Flush();
sw.Close();

// .................................................
// En otro codigo (otro boton, etc, sino genera error con el "sw" anterior
// .................................................

// Parametros
int offsetInicio = 93;
int offsetFinal = 110;
int repeticiones = 4;
// esta demas, pero es que en .net piden la longitud, no la ubicacion final :P
int lenOffset = offsetFinal - offsetInicio;

FileStream sr = File.Open(Application.StartupPath + Path.DirectorySeparatorChar + "archivo3.txt", FileMode.Open);
// Va hacia el inicio del offset
sr.Seek(offsetInicio, SeekOrigin.Begin);
byte[] frase = new byte[lenOffset];
// Copiamos los 17 caracteres
sr.Read(frase, 0, lenOffset);
sr.Seek(0, SeekOrigin.Begin);

FileStream sw = File.Open(Application.StartupPath + Path.DirectorySeparatorChar + "archivo4.txt", FileMode.Create);
// Copiamos lo que estaba antes del offset
while (sr.Position < offsetFinal)
{
   sw.WriteByte(Convert.ToByte(sr.ReadByte())); sw.Flush();
}

// repetimos el offset
for (int i = 0; i <= repeticiones; i++)
{
   sw.Write(frase, 0, frase.Length); sw.Flush();
}

// copiamos el resto del archivo
while (sr.Position < sr.Length)
{
   sw.WriteByte(Convert.ToByte(sr.ReadByte()));sw.Flush();
}

sw.Close();
sr.Close();


Espero que te sirva :)

43H4FH44H45H4CH49H56H45H

Puede ser asi tb:

Código (csharp) [Seleccionar]

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 i1 = 1; i1 < leer.Length; i1++)
{
   escribir.Write(leer[i1]);
      if (i1 == 109)
       {
          for (int i = 93; i<111; i++)
             {
                escribir.Write(leer[i]);
              }
         }
}
escribir.Close();
fstream.Close();

-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