IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Determiner Type d'un fichier


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut Determiner Type d'un fichier
    Bonjour,
    Je suis en train de developper un client smtp en C, et la je suis en train de m'attaquer aux fichiers joints. Pour cela j'utilise les MIMEs types comme indiqués dans la RFC et je dois definir le Content-Type du fichier.
    Or comment faire pour connaitre le type d'un fichier, evidement c'est tres deconseiller de se baser simplement sur l'extension (comme le fesait desfois windows). Or je me suis renseigner, sous linux il y a un fichier avec une liste de types et quand le systeme liste un fichier il lit les premiers octets de celui-ci (**ELF pour exe sous nux) pour determiner le type.
    Donc je voulais savoir si il existe une fonction en C, j'ai trouvé des sources mais en VB (comme d'hab).Ou auriez vu des sources a me proposer ?
    Merci de votre aide,
    Ciao,

  2. #2
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Sous *nix, il y a le programme file (ftp://ftp.astron.com/pub/file/) qui donne le type d'un fichier. Tu peux sois l'appeler directement, soit regarder le code (ou aussi voir comment les autres projets (thunderbird, kmail, sylpheed, etc.) font).

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par leCcsympas
    Donc je voulais savoir si il existe une fonction en C, j'ai trouvé des sources mais en VB (comme d'hab).Ou auriez vu des sources a me proposer ?
    C'est trivial, fait le toi même gros fainéant...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut oui
    C'est tellement trivial que j'arrive meme pas a m'imaginer l'algo sans code !

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Nan, ça me semble pas faisable soi meme, ya trop de types de fichier

    Je pense qu'il ya un type Mime generique qui marche pour tout fichier binaire, au pire si tu donnes pas le bon je pense que c'est pas grave, l'important c'est de pas dire qu'un fichier binaire est du texte pour pas que le client mail essaye de l'afficher directement.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par leCcsympas
    C'est tellement trivial que j'arrive meme pas a m'imaginer l'algo sans code !
    Je parle de la reconnaissance par le 2 premiers caractères. Sinon, dans le doute -> binaire.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Mais pour un fichier texte sans BOM, lire les deux premiers caractères ne suffira pas (sauf pour les scripts commençant par #!).

    Un fichier commençant par "BM" est-il un simple fichier texte ou une image BMP ?

    J'ignore comment fait file pour déterminer si un fichier est texte ou binaire.
    Je serais du genre à utiliser une heuristique, genre chercher un caractère nul dans le premier ko...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    Je serais du genre à utiliser une heuristique, genre chercher un caractère nul dans le premier ko...
    La présence d'un 0 est une bonne méthode. On peut aussi utiliser le profilage (histogramme des valeurs des bytes). Si il y a un pic pour CR et/ou LF, on a probablement affaire à un fichier texte. Ca reste des stats (c'est ça heuristique ? genre 'approximatif ?)

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour moi, c'est heuristique du genre approximatif, car on ne traite que le premier ko.

    Mais c'est vrai que si l'on traitait tout le fichier, ce serait quand même approximatif, même si ça le serait moins.


    PS: Quand on cherche des caractères nuls, le truc est de deviner la taille du caractère. Histoire de ne pas prendre un vrai texte UTF-16 sans BOM (pas bien!) pour du binaire. Enfin, c'est surtout possible avec les charsets européens (l'octet supérieur est souvent nul)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    PS: Quand on cherche des caractères nuls, le truc est de deviner la taille du caractère. Histoire de ne pas prendre un vrai texte UTF-16 sans BOM (pas bien!) pour du binaire. Enfin, c'est surtout possible avec les charsets européens (l'octet supérieur est souvent nul)
    Effectivement. Mais la méthode de l'histogramme peut aider. (Un énorme pic a 0 et des petits à CR/LF...)

Discussions similaires

  1. Determiner le type d'un fichier
    Par dharkan dans le forum VB.NET
    Réponses: 14
    Dernier message: 13/06/2015, 20h45
  2. Connaitre type d'un fichier (<input type="file"..>) avec javascript
    Par goldorax113 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 09h00
  3. Type de données fichier
    Par dumser1 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/02/2006, 11h23
  4. [OLE Excel] Modifier le "save as type" d'un fichier
    Par Bouillou dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/02/2006, 17h42
  5. [Upload] Type MIME de fichiers à uploader
    Par franculo_caoulene dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo