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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Determinar el tipo de archivo independientemente de la extensión que tengan
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Determinar el tipo de archivo independientemente de la extensión que tengan  (Leído 5,073 veces)
.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Determinar el tipo de archivo independientemente de la extensión que tengan
« en: 1 Noviembre 2010, 01:10 am »

Bueno ahora si me vi en la urgencia de pedir ayuda aquí en el foro ya un tiempo atrás estaba reproduciendo mi música en Linux con amaroK, bueno pues una de sus opciones no recuerdo cual que me quito todas las exenciones a mis archivos de música y bueno en ese tiempo como aun así lo reproducía la música sin ningún problema no le di tanta importancia, pero ahora que tengo algo de tiempo libre pues decidí hacer un programa para devolverles sus respectivas extensiones ah mi querida musica que son como 10 000 y picos canciones las cuales no todas son .mp3, entonces el
problema es como determinar el tipo de archivo independientemente de la extensión que tengan ya que en este caso no tienen extensión alguna
. Espero su ayuda, de momento seguiré googleando ah ver que encuentro saludos..... :laugh:


En línea

Simplemente .::IT::.
43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #1 en: 1 Noviembre 2010, 04:50 am »

Solo necesitas un editor Hexadecimal y lees los primeros bytes (depende del tipo archivo) para diferenciarlo, en el caso de .mp3 se puede obtener mas datos los primeros 100 a 130 bytes (esto tb es variable).
Ya teniendo los bytes a buscar, codificar el programa para que lea los mismos, en base a esos datos los ordene y añada su extensión.


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
.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #2 en: 1 Noviembre 2010, 14:53 pm »

si ya hice eso pero la verdad los primeros bytes de unos 10 mp3 que tome de muestran son todos diferentes!!!!!!!!!!!!!!!!!
En línea

Simplemente .::IT::.
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #3 en: 1 Noviembre 2010, 16:16 pm »

SI los ultimos 128 bytes del mp3 empiezan con "TAG" o "ID3" (no me acuerdo bien) es porque tiene id3tag v1 por lo que es un mp3
La version 2 se encuentra al principio (creo que los primero 20 bytes) o algo asi, fijate la documentacion :P

EDIT:

ID3v2 3.0 Header son 10 bytes y debe empezar con "ID3" seguido de 2 bytes que son la version mayor y menor respectivamente

En la ID3v1 (1.0 o 1.1) en los ultimos 128 bytes debe empezar con "TAG" seguido de caracteres ascii que son 30 por cada variable (titulo, artista, album) y demas informacion (año, genero, numero de pista)

Ojo, puede ser que no tenga ninguno los tag pero es poco probable, en ese caso... no queda mas que intentar reproducirlos y si se puede reproducir lo renombras.
« Última modificación: 1 Noviembre 2010, 16:49 pm por raul338 » En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #4 en: 1 Noviembre 2010, 16:27 pm »

si ya hice eso pero la verdad los primeros bytes de unos 10 mp3 que tome de muestran son todos diferentes!!!!!!!!!!!!!!!!!

Solo tengo a mano poco mas de 1000 .mp3 y todos tienen "ID3" en los primeros 3 bytes, si nos es tu caso, prueba lo que escribió raul338.
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
.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #5 en: 1 Noviembre 2010, 17:07 pm »

Acabo de escribir lo siguiente y supongo que ah de funcionar para los mp3, me arriesgare a ver que tal funciona gracias a todos lo que contestaron y hasta pronto. ;D, los que son .wma les cambiare la extensión ah mano porque ya me dio flojera programar, igual son muy pocos!!!!!!!!!!!!!!!!!!! ;-)
Código:
 
public static bool IsMp3(string path)
{
   if (File.Exists(path))
   {

      FileStream myFileMusic = new FileStream(path, FileMode.Open);

      if (myFileMusic.Length < 3)
         return false;

      byte[] mysPrimariBytes = new byte[3];

      myFileMusic.Read(mysPrimariBytes, 0, 3);
      myFileMusic.Close();

      string myPrimariString = Encoding.UTF8.GetString(mysPrimariBytes);

      if (myPrimariString == "ID3")
         return true;
      else
         return false;
   }
   else
      throw new Exception(String.Format("No existe el archivo \"{0}\"", path));
}
« Última modificación: 1 Noviembre 2010, 18:09 pm por .::IT::. » En línea

Simplemente .::IT::.
.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #6 en: 1 Noviembre 2010, 19:53 pm »

Pues bueno acabo de sacrificarme con el siguiente codigo:

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace testmp3
{
    class Program
    {
        static void Main()
        {
            string NewName;

            DirectoryInfo _DirectoryInfo = new DirectoryInfo(System.AppDomain.CurrentDomain.BaseDirectory);
            FileInfo[] mysFiles = _DirectoryInfo.GetFiles();

            Console.WriteLine("Presione uan tecla para comenzar");
            Console.ReadKey();  
            foreach (FileInfo myFile in mysFiles)
            {
                try
                {
                    if (myFile.Extension == "")
                    {
                        if (IsMp3(myFile.FullName))
                        {
                            NewName  = String.Format("{0}.mp3", myFile.Name);
                            myFile.MoveTo(NewName);
                        }
                        else
                        {
                            NewName = string.Format(System.AppDomain.CurrentDomain.BaseDirectory + @"wma\" + myFile.Name);
                            myFile.MoveTo(NewName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            Console.WriteLine("Todo termino precione una tecla para terminar");
            Console.ReadKey();
        }

        public static bool IsMp3(string path)
        {
            if (File.Exists(path))
            {

                FileStream myFileMusic = new FileStream(path, FileMode.Open);

                if (myFileMusic.Length < 3)
                    return false;

                byte[] mysPrimariBytes = new byte[3];

                myFileMusic.Read(mysPrimariBytes, 0, 3);
                myFileMusic.Close();

                string myPrimariString = Encoding.UTF8.GetString(mysPrimariBytes);

                if (myPrimariString == "ID3")
                    return true;
                else
                    return false;
            }
            else
                throw new Exception(String.Format("No existe el archivo \"{0}\"", path));
        }
    }
}

Al parecer todo funciono pero tengo algunos archivos de musica(118 par ser precisos)
algunos son .wma  pero algunos "son .wma y .mp3 " jaja lo digo porque al ponerles .wma el windows media player lo reproduce normal sin ninugun mensaje lo mismo pasa si le pongo .mp3 entonces no se que pensar son .wma o .mp3??? expero sus opiniones!!!!!!!!!
« Última modificación: 1 Noviembre 2010, 19:55 pm por .::IT::. » En línea

Simplemente .::IT::.
.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #7 en: 1 Noviembre 2010, 20:10 pm »

Bueno estoy contento con los resultados ya que tener 118 canciones sin saver que formato es en comparacion de los 10000 y picos ya es mucho de todos modos pienso que eso de la extructura de los mp3, wma o otros formatos es mucho rollo para un cerebro tan pobre como el mio asi que de mi parte doy gracias ah todos y concluido el terma...................
En línea

Simplemente .::IT::.
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #8 en: 1 Noviembre 2010, 20:30 pm »

 .::IT::.

No postaes doble y menos triple! , usa editar el post.

Un saludo y gracias.
En línea

Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: Determinar el tipo de archivo independientemente de la extensión que tengan
« Respuesta #9 en: 2 Noviembre 2010, 00:14 am »

Ya sabes que la cabecera de los archivos contienen ciertas palabras que indican su extension, pero imaginate hacer una función IsXXX por cada una de las extensiones existentes :xD y si la información que contiene la extensión no está en la cabecera?

Si lo quisiera hacer, seguiria los siguientes pasos...

Hacer un archivo (no se si lo quieras cifrar), en el cual se carguen un conjunto de 3 valores por cada extensión (podrías tambien hacer una clase que administre el archivo en el cual se cargan y guardan los valores) string, List Of String y List Of Long, los llamaremos A, B Y C.

A debe contener el nombre real de la extesión Ej: .txt
B debe contener una lista de string que leyendo las direcciones que existen en C respectivamente para B retornen el valor actual de B (No se si se entendio :xD)

Más sencillo si:

Código:
A = ".jpg"
B = {"siempre", "contienen", "esta", "frase"}
C = {123, 456, 789, 101112}

Quiere decir que leyendo 7 Bytes la dirección 123 del archivo debes obtener la palabra "siempre", obtener "contienen" leyendo 9 Bytes de la dirección 456 y así con todas las direcciones, sí todas resultan ciertas entonces estas en presencia de un archivo jpg.

Esto lo deberás hacer por que si yo creo una extension .ej que guarda texto plano, no podrás diferenciar si este es .txt o .ej o cualquier otra extensión de texto plano, eso agregado a que el texto plano no tiene estructura particular, es simplemente texto plano.

Debes analizar la estructura tu mismo con editor Hexadecimal de cada extensión o buscar en San Google como estan estructuradas las extensiones más conocidas, si decides hacerlo tu mismo debes ver los valores que son constantes y que las direcciones de los valores sean unicas en comparacion con la lista de extensiones que quieres que abarque tu sistema.

Espero que te haya servido :D
En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Actualizado] Determinar que tipo de compresión utiliza un programa
Ingeniería Inversa
GonzaFz 2 3,789 Último mensaje 8 Marzo 2017, 15:11 pm
por GonzaFz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines