Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#681
Hola:

Lo he pasado a C#, espero que no importe.
Código (csharp) [Seleccionar]

public string GetRomName(string filepath)
{

byte[] buffer = Enumerable.Repeat(new byte(), capacidadDelNombre).ToArray;

using (FileStream fs = new FileStream(filepath, FileMode.Open)) {

fs.Seek(offset, SeekOrigin.Begin);
fs.Read(buffer, 0, capacidadDelNombre);
fs.Close();

}

return string.Join("", from b in bufferConvert.ToChar(b)).TrimEnd({ ' ' });

}


http://converter.telerik.com/

¿Cómo ese código encuentre el nombre?

Da error en C#.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO; // No olvidar.

namespace SNES_EP
{
    public partial class Form_Principal : Form
    {
        public Form_Principal()
        {
            InitializeComponent();
        }
       
        private void button_Abrir_Click(object sender, EventArgs e)
        {
            Abrir_Archivo();
            Leer_ROM();
        }

       

            public string GetRomName(string filepath)
    {
                int capacidadDelNombre = 15;
                string offset = "101C0";
     
    byte[] buffer = Enumerable.Repeat(new byte(), capacidadDelNombre).ToArray;
     
    using (FileStream fs = new FileStream(filepath, FileMode.Open)) {
     
    fs.Seek(offset, SeekOrigin.Begin);
    fs.Read(buffer, 0, capacidadDelNombre);
    fs.Close();
     
    }
     
    return string.Join("", from b in bufferConvert.ToChar(b)).TrimEnd({ ' ' });
     
    }
        void Leer_ROM()
        {

        }

        void Abrir_Archivo()
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox_Archivo.Text = openFileDialog1.FileName.ToString();
            }
        }

        private void checkBox_Información_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox_Información.Checked == true)
            {
                Width = 643;
                Height = 783;
            }

            else
            {
                Width = 643;
                Height = 508;
            }
        }

        private void abrirArchivoToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }
    }
}


En VB.
Código (vbnet) [Seleccionar]
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms

Imports System.IO
' No olvidar.
Namespace SNES_EP
Public Partial Class Form_Principal
Inherits Form
Public Sub New()
InitializeComponent()
End Sub

Private Sub button_Abrir_Click(sender As Object, e As EventArgs)
Abrir_Archivo()
Leer_ROM()
End Sub


Private Sub Leer_ROM()

End Sub

Private Sub Abrir_Archivo()
If openFileDialog1.ShowDialog() = DialogResult.OK Then
textBox_Archivo.Text = openFileDialog1.FileName.ToString()
End If
End Sub

Private Sub checkBox_Información_CheckedChanged(sender As Object, e As EventArgs)
If checkBox_Información.Checked = True Then
Width = 643
Height = 783
Else

Width = 643
Height = 508
End If
End Sub

Private Sub abrirArchivoToolStripMenuItem_Click(sender As Object, e As EventArgs)

End Sub
End Class
End Namespace


Vamos haber si esto sale.
#682
Hola:



He hecho un boceto no funcional, que tiene que leer una ROM de una Super Nintendo, en este caso uso el juego Ultimate Mortal Kombat 3. Toda l ainformación que se indica arriba nada más cargar el archivo este programa tiene que mostrarlo. No se la mejor manera de hacerlo. Por ejemplo, en la cabecera ROM del programa aparece el título que encuentra dentro de la ROM. Mirando con este editor hexadecimal gratuito lo he encontrado en la posición de dirección de memoria concretament esta 101C0 muestar el título como indica en la imagen de abajo.



Siempre son de longituda 15 carácteres o bytes contando hasta los espacios en blanco. Así que cualquier ROM debe buscar ese título dentro del juego.



Quiero hacer este programa poco a poco y tome forma, así que abajo les dejo las descargas y hagan pruebas. Pensé en buscar la posición de memoria que casi siempre es el mismo en los 4 MB que pesa el archivo, en otros programas que funciona de maravilla los detecta aunque la posición de memoria sea diferente, no todas las ROM son iguales, así que creo que busca los 15 bytes del título.

El programa original lo descargas aquí que este si es funcional y quiero hacer lo mismo. ¿Por qué iba ahcer lo mismo si ya existe?

La respuesta es que en cada pestaña haré funcione de cada programa para hacerlo todo en uno, este es el primero de los cuantos que hay por ahí. ;)

¿Alguna ayuda para hacerlo?

Descargas:

Editor Hexadecimal

Proyecto Visual C# para facilitar los ejemplos.

ROM funcional de SNES para cargarlo en el proyecto y verlo en el editor hexadecimal.

Saludos.
#683
.NET (C#, VB.NET, ASP) / Re: Partir archivo
4 Junio 2015, 23:35 PM
Cita de: Eleкtro en 28 Mayo 2015, 02:25 AM
Aaquí tienes mi solución compelta para partir y unir archivos, eso si, lo desarrollé en VB.Net pero cómo siempre intentaré ayudar con la conversión en C# (conversión online y luego post-modificada por mi, pero no lo he llegado a testear).

Por supuesto lo he desarrollado teniendo en cuenta que sea capaz de partir archivos exactamente a la mitad (teniendo en cuenta que 1 byte es la unidad, por ende, un archivo de 3 bytes no se podrá partir en 2 partes, a menos que adaptes el código fuente para incrementarle 1 byte a una de las dos partes en el buffer de escritura),
si la idea te ha gustado y quieres utilizarla pero no te funciona la traducción a C#, siempre puedes compilar el código original escrito en VB.Net a una librería, y utilizarla desde tu proyecto C#.




Características

Partir archivo en trozos según el tamaño de trozo especificado.
Partir archivo en trozos según la cantidad de trozos especificada.
Unir archivo previamente partido.
Sobreescribir archivos, eliminar restos de archivos...
Eventos para reportar el progreso (porcentajes) de las operaciones de partir y unir.




Modo de empleo

VB.Net:
Código (vbnet) [Seleccionar]
''' <summary>
''' Handles the <see cref="FileSplitter"/> instance.
''' </summary>
Private WithEvents splitter As New FileSplitter() With {.BufferSize = .BufferSize}

' The file to split.
Private ReadOnly filePath As String = "C:\File.ext"

' Split by chunk size.
Me.splitter.Split(sourceFile:=filePath,
                 chunkSize:=CInt(New IO.FileInfo(filePath).Length / 2),
                 chunkName:="File.Part",
                 chunkExt:="fs",
                 overwrite:=True,
                 deleteAfterSplit:=False)

' Or split by chunk amount.
Me.splitter.Split(sourceFile:=filePath,
                 chunkCount:=2,
                 chunkName:="File.Part",
                 chunkExt:="fs",
                 overwrite:=True,
                 deleteAfterSplit:=True)

''' <summary>
''' Handles the <see cref="FileSplitter.SplitProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="FileSplitter.SplitProgressChangedArgs"/> instance containing the event data.</param>
Private Sub Splitter_SplitProgressChangedArgs(ByVal sender As Object, ByVal e As FileSplitter.SplitProgressChangedArgs) _
Handles splitter.SplitProgressChanged

   labelSplit1.Text = String.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"))
   labelSplit2.Text = String.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"))
   labelSplit3.Text = String.Format("Current  Chunk: {0} of {1}", CStr(e.ChunksCreated + 1), CStr(e.ChunksToCreate))

End Sub

''' <summary>
''' Handles the <see cref="FileSplitter.MergeProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="FileSplitter.MergeProgressChangedArgs"/> instance containing the event data.</param>
Private Sub Splitter_MergeProgressChangedArgs(ByVal sender As Object, ByVal e As FileSplitter.MergeProgressChangedArgs) _
Handles splitter.MergeProgressChanged

   labelMerge1.Text = String.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"))
   labelMerge2.Text = String.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"))
   labelMerge3.Text = String.Format("Current  Chunk: {0} of {1}", CStr(e.ChunksMerged + 1), CStr(e.ChunksToMerge))

End Sub


C#:
Código (csharp) [Seleccionar]
/// <summary>
/// Handles the <see cref="FileSplitter"/> instance.
/// </summary>
private FileSplitter splitter = new FileSplitter { BufferSize = .BufferSize };

// The file to split.
private readonly string filePath = "C:\\File.ext";

// Split by chunk size.
this.splitter.Split(sourceFile: filePath,
                   chunkSize: Convert.ToInt32(new IO.FileInfo(filePath).Length / 2),
                   chunkName: "File.Part",
                   chunkExt: "fs",
                   overwrite: true,
                   deleteAfterSplit: false);

// Or split by chunk amount.
this.splitter.Split(sourceFile: filePath,
                   chunkCount: 2, chunkName: "File.Part",
                   chunkExt: "fs",
                   overwrite: true,
                   deleteAfterSplit: true);

/// <summary>
/// Handles the <see cref="FileSplitter.SplitProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FileSplitter.SplitProgressChangedArgs"/> instance containing the event data.</param>
private void Splitter_SplitProgressChangedArgs(object sender, FileSplitter.SplitProgressChangedArgs e)
{
 labelSplit1.Text = string.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"));
 labelSplit2.Text = string.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"));
 labelSplit3.Text = string.Format("Current  Chunk: {0} of {1}", Convert.ToString(e.ChunksCreated + 1), Convert.ToString(e.ChunksToCreate));
}

/// <summary>
/// Handles the <see cref="FileSplitter.MergeProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FileSplitter.MergeProgressChangedArgs"/> instance containing the event data.</param>
private void Splitter_MergeProgressChangedArgs(object sender, FileSplitter.MergeProgressChangedArgs e)
{
 labelMerge1.Text = string.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"));
 labelMerge2.Text = string.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"));
 labelMerge3.Text = string.Format("Current  Chunk: {0} of {1}", Convert.ToString(e.ChunksMerged + 1), Convert.ToString(e.ChunksToMerge));
}

'=======================================================
'Service provided by Telerik (www.telerik.com)
'=======================================================





Código fuente
VB.Net: http://pastebin.com/kyqkdXZj
C#: http://pastebin.com/DKfCWuw1

Demo Form
VB.Net: http://pastebin.com/BjzEhPdd
C#: http://pastebin.com/Fq0QCJRi




Buen trabajo.

¿Puedes pasarme el proyecto completo?
El correo puedes verlo por aquí.

Me parece un programa muy completo, echo y derecho. ;)

Hay que probarlo.
#684
.NET (C#, VB.NET, ASP) / Re: Partir archivo
4 Junio 2015, 23:26 PM
Cita de: DarK_FirefoX en 24 Mayo 2015, 02:33 AM
Estuve pensando sobre lo que quieres hacer y me vino a la mente trabajar con unos FileStream y funciona, lo que pasa que a la hora de crear los buffers (byte[]) tienes que tener bien en cuenta el tamaño que le vas a dar para que tengan el tamaño exacto a la hora de unirlos. Para que no te queden corruptos, tienes que tener en cuenta bien la longitud de los ficheros que creas nuevos. Fijándote bien si la longitud del archivo es par o impar, para saber como controlar eso a la hora de picar el archivo. La clase FileStream tiene un método .Read() con el cual puedes leer (y guardar en un buffer (byte[]) desde una posición dada (offset) una cantidad de bytes determinados.

No se si esta sea la mejor manera de hacerlo, pero es una.

Puedes ir trabajando por ahi, me gustaría poder tirar el código ahora y ayudarte más pero ahora mismo estoy con poco tiempo, pero más tarde si tengo la oportunidad te ayudo un poco más.

Salu2s




Añado:

Como te había comentado, estuve viendo una forma de hacerlo, que quizás no sea la mejor, pero me funciono bien. (No siempre la primera vez es la mejor forma de hacerlo) Ahora solo te queda ver si esto te sirve o puedes/quieres hacerle modificaciones:

Código (csharp) [Seleccionar]
static void SplitFiles(string file)
       {
           FileStream loadedFile = new FileStream(file, FileMode.Open);

           //Aquí calculamos la primera mitad del archivo analizando si es par o impar la longitud completa.
           //En caso de que sea par le añadimos 1 y sino le añadimos 0 (lo dejamos como va)
           long firstHalfLength = (loadedFile.Length / 2) + ((loadedFile.Length % 2 != 0) ? 1 : 0);
           long secondHalfLength = loadedFile.Length / 2;

           //Creamos los bufferes con el tamaño calculado
           byte[] firstHalf = new byte[firstHalfLength];
           byte[] secondHalf = new byte[secondHalfLength];

           //Léemos los bytes del FileStream y los pasamos a los bufferes
           loadedFile.Read(firstHalf, 0, firstHalf.Length); //Lees la primera mitad
           loadedFile.Read(secondHalf, 0, secondHalf.Length); //Lees la segunda mitad

           loadedFile.Close();

           //Creamos los FileStream para los nuevos ficheros y escribimos los bytes en los mismos
           FileStream firstFile = new FileStream("fichero1.part1", FileMode.Create);
           firstFile.Write(firstHalf, 0, firstHalf.Length);

           firstFile.Close();

           FileStream secondFile = new FileStream("fichero1.part2", FileMode.Create);
           secondFile.Write(secondHalf, 0, secondHalf.Length);

           secondFile.Close();
       }

       static void JoinFiles(string file1 , string file2)
       {
           //Abrimos los FileStream de los archivos
           FileStream fileStream1 = new FileStream(file1, FileMode.Open);
           FileStream fileStream2 = new FileStream(file2, FileMode.Open);

           //Creamos el buffer para los bytes
           byte[] joinedFiles = new byte[fileStream1.Length + fileStream2.Length];

           //Leemos la primera mitad del archivo y la guardamos en el buffer nuevo
           fileStream1.Read(joinedFiles, 0, (int)fileStream1.Length);
           //Leemos la segunda mitad del archivo
           fileStream2.Read(joinedFiles, (int)(fileStream1.Length), (int)fileStream2.Length);

           fileStream1.Close();
           fileStream2.Close();

           //Escribimos el contenido del buffer en el nuevo fichero
           FileStream joinedFileStream = new FileStream("output.jpg", FileMode.Create);
           joinedFileStream.Write(joinedFiles, 0, joinedFiles.Length);
           joinedFileStream.Close();  
       }


Lo hice haciendo dos métodos, uno para picarlo y otro para unirlos. Puedes mejorarlo para que al unirlo puedas identificar que archivos tiene que unir automáticamente al pasarle el nombre del primer archivo.

Una manera de llamarlo sería:

Código (csharp) [Seleccionar]
SplitFiles("file.jpg");
JoinFiles("fichero1.part1", "fichero1.Part2");





Añado: Veo que publicaste otro tema sobre lo mismo con algún código. Bueno, cualquier otra duda ya sabes. Pregunta

Salu2s
Veo que publicaste

He intentado hacerlo per ono me sale.

¿Puedes poner el programa completo?

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO; // No olvidar.

namespace Partir_Archivo_2
{
    class Program
    {
        static void Main(string[] args)
        {
           
        }
    }
}


Al menos una opción que diga Cortar en dos, y el otro Pegar.

Saludos.
#685
Hola:

Donde pone la letra i es una variable:
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Consola
{
    class Program
    {
        static void Main(string[] args)
        {
            int i= 59; // i es una variable tipo entero que contiene valor 59.

            Console.WriteLine("Este año cumpliré {0} años.", i); // Muestra mensaje en pantalla con la edad.

            Console.ReadKey(); // Espera que pulses una tecla y sales de la pantalla.
        }
    }
}


Como puedes ver, en este caso la letra o variable i le he puesto un 59. Cuanto veas esto:

Console.WriteLine("Este año cumpliré {0} años.", i);

donde pone {0} es el resultado de la variable i que es 59, pues el 59 es lo que vas a ver al ejecutar la apliación en vez de ver {0}. En otras palabras, el contenido de i que es 59, sustituye el {0}

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Consola
{
    class Program
    {
        static void Main(string[] args)
        {
            string P1 = "Posición 1";
            string P2 = "Posición 2";
            string P3 = "Posición 3";

            Console.WriteLine("Estoy en estas posiciones indicada aquí. {2}, {1} y el {0}", P3, P2, P1);
            Console.ReadKey(); // Espera que pulses una tecla y sales de la pantalla.
        }
    }
}




Saludos.
#686
.NET (C#, VB.NET, ASP) / Re: Partir archivo
4 Junio 2015, 18:22 PM
Hola:

Muchas gracias a todos.

Probaré los ejemplos y eso que el primero me funciona de maravilla,a menos partirlo.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO; // No olvidar.

namespace Partir_Archivo
{
   class Program
   {
       static void Main(string[] args)
       {

           const int CHUNKSIZE = 1024 * 1024;
           byte[] buffer;
           int i = 1;

           FileStream infile = new FileStream(@"Archivo.bin", FileMode.Open, FileAccess.Read);
           BinaryReader reader = new BinaryReader(infile);

           reader.BaseStream.Position = 0;
           buffer = reader.ReadBytes(CHUNKSIZE);
           while (buffer.Length != 0)
           {
               FileStream outfile = new FileStream(@"File_" + i + ".bin", FileMode.CreateNew, FileAccess.Write);
               BinaryWriter writer = new BinaryWriter(outfile);

               writer.Write(buffer);
               writer.Flush();
               writer.Close();
               outfile.Close();

               buffer = reader.ReadBytes(CHUNKSIZE);
               i++;
           }

           reader.Close();
           infile.Close();
       }
   }
}




Analizaré los ejemplos de arriba que me han mostrado.

El tema de si hay 3 bytes, se puede partir de esta manera.

Primer archivo ocupa dos bytes y el segundo 1 byte, sin problemas.

Una pregunta que les hago

Tengo un archivo de 48 M bit, quiero partir uno de 32 Mb (no Mega Byte) y el otro se queda en 16 M bit.

¿Cómo lo hago?

Esto ya es más complicado, ya que quiero hacer un Form bien hecho que pueda elegir el archivo donde lo tengo ubicado, esta parte si se hacerlo, encontrar el archivo, ejejjeje. Ahora me falta esta parte como curiosidad, partirlo como y quiera. Si parto el de 48 Mb a 32 el primer archivo, luego crea el resto que sobra que son 16 M Bit como dije antes.

Saludos.
#687
Cita de: El_Andaluz en  4 Junio 2015, 01:42 AM
¿Que quiere decir que se requiere una descargar de gigas ?


A mi personalmente me parece un royo tener que grabarlo en un Dvd y luego instalarlo se supone que le das aceptar y lo instala en tu ordenador pero digo lo mismo que en otro post puedes seguir usando Windows7 ? Y si instala Windows10 perderás tus fotos, pelis, documentos y cosas asín y todo lo que tenía en el escritorio se quedara igual que lo tenías en el otro sistema operativo.

Hola:

Antes de todo, copias de seguridad. Y no, no es un royo pasarlo en DVD, quiero tenerlo en DVD, ya que tengo Windows 7 Pro original, quiero el 10 también de paso, ya que lo regalan, que más da.

Lo queno se como será el tema en Windwos 11 por llamarlo de alguna manera. Lo que pasa es que Microsoft no quiere que tengamos tantos años con Winwdows 7, si el microprocesador no me acepta Windowes 8 ni el 8.1, me imagino que el 10 menos todavía. Así que paso de comprar un PC nuevo ya que este me va la leche de bien.

Saludos.
#688
Hola:

¿No hay manera de esa manera que se pueda crear una ISO y pasarlo a un DVD?

Saludos.
#689
Hola:

Me funcniona todo. Les decjo un tutorial en pdf aún por completar para que opinen.

Ver tutorial.
https://www.dropbox.com/s/ha07f67zieee7v6/Interfaz%20control%20reles%20Arduino.pdf?dl=0

Saludos.
#690
Hola:

Me ha llegado esta ventana, después de pensarlo por varios días le he dado aceptar que si quiero ese Windows.


Uso Windows 7 original. Quiero saber si a la hora de descargarlo se descarga una ISO o una especie de ejecutable cosa que no me agrada esto último ya que no lo puedo pasar a un DVD.

¿Se sabe algo?

Saludos.