Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-10-2016
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
como saber que tipo de fichero es

Hola a todos:
estoy haciendo un programa, donde necesito determinar que tipo de archivo es el seleccionado...
sere mas especifico, tenemos un archivo de imagen, puede ser bmp, gif, jpg, png, etc. Este archivo, es myimagen.png, cullo contenido es una foto de mi hermano, pero el, le cambio la extension y desde que descubrio esto, esconde sus archivos de esta forma, y tengo que estar probando cada programa para saber cual me habre correctamente el archivo...
alguien tiene algun metodo o funcion para saber que tipo de fichero es...
Responder Con Cita
  #2  
Antiguo 09-10-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El mismo Paint abre el archivo aunque su extensión esté cambiada...

Saludos.
Responder Con Cita
  #3  
Antiguo 10-10-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Supongo que debe haber una cabecera estandard para cada tipo de fichero (N bytes al inicio que sean coincidentes para todos los ficheros de un tipo).
Deberías investigar esos ficheros para los diferentes tipos e intentar identificarlos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 10-10-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola a todos,

yo utilizo las siguiente función para determinar el tipo imagen para las extensiones mas conocidas,

Código Delphi [-]
interface
...
   function  GetImageFormat(const AFileName: String; OmitirExtension:Boolean=true): String; overload;
   function  GetImageFormat(Stream: TStream; var fileType:String):boolean; overload;
...
implementation
...
function GetImageFormat(const AFileName: String; OmitirExtension:Boolean=true): String;
///  Si el parametro omitirExtension esta a true, solamente devuelve una extensión
///  cuando las cabezeras del fichero son realmente reconocidas
var
  ext: string;
  FileStream: TFileStream;
begin
  ext := lowerCase(extractFileExt(AFileName));
  try
    FileStream := TFileStream.Create(AFileName, fmOpenRead);
    try
      if not GetImageFormat(FileStream, result) and
       not omitirExtension then
           // si no se reconoce el fichero por su primeros caractes, se devuelve la propia extensión del fichero
           Result:=ext;
    finally
      FileStream.free;
    end;
  except
  end;
end;

function GetImageFormat(Stream: TStream; var fileType:string):Boolean;
var
  FirstBytes: AnsiString;
begin
  result:=False;
  fileType := '';
  if (Stream <> nil) and (Stream.Size > 40) then
  try
    SetLength(FirstBytes, 8);
    Stream.Read(FirstBytes[1], 8);
    if (Copy(FirstBytes, 1, 2) = 'BM') then
      fileType := '.bmp'
    else if (FirstBytes = #137'PNG'#13#10#26#10) then
      fileType := '.png'
    else if (Copy(FirstBytes, 1, 3) = 'GIF') then
      fileType := '.gif'
    else if  (Copy(FirstBytes, 1, 2) = #$FF#$D8) then
      fileType := '.jpg'
    else if (Copy(FirstBytes, 1, 3) = #$49#$49#$2A) then
      fileType := '.tif'
    else if (Copy(FirstBytes, 1, 3) = #$0#$0#$01) then
      fileType := '.ico';
  finally
    result:=(fileType<>'');
  end;
end;
...
end.

Para el resto de extensiones simplemente hay que buscar las cabezeras que utilizan y añadirlas a la lista

Un saludo
Responder Con Cita
  #5  
Antiguo 10-10-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
En algunos *nix se puede correr:

Cita:
file --mime FILE
Esto esta basado en libmagic. Lo he usado en python:

https://stackoverflow.com/questions/...python#2753385


---

Ahora, dile a tu hermano que deje de esconder sus fetiches de esa manera...
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 10-10-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mamcx Ver Mensaje
Ahora, dile a tu hermano que deje de esconder sus fetiches de esa manera...
O que deje de ver las fotos de su hermano

LineComment Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como saber el tamaño de un fichero kenychy C++ Builder 13 19-11-2010 16:46:59
Como saber si un fichero está abierto RaulChemical API de Windows 13 30-12-2008 17:31:42
Cómo saber qué tipo de SO es. Ziara C++ Builder 4 22-09-2008 13:04:21
Cómo saber si un fichero esta marcado de sólo lectura ? David Varios 2 13-08-2008 16:20:19
como saber el tipo de datos de un campo miguelml Varios 4 17-11-2005 08:36:17


La franja horaria es GMT +2. Ahora son las 07:45:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi