C# Comment puis-je tester un fichier est un fichier jpeg?
À l'aide de C# comment puis-je tester un fichier est un fichier jpeg? Dois-je vérifier pour un .extension jpg?
Grâce
Vous devez vous connecter pour publier un commentaire.
À l'aide de C# comment puis-je tester un fichier est un fichier jpeg? Dois-je vérifier pour un .extension jpg?
Grâce
Vous devez vous connecter pour publier un commentaire.
Plusieurs options:
Vous pouvez vérifier l'extension du fichier:
ou vérifiez l'exactitude de l' nombre magique dans l'en-tête du fichier:
Une autre option serait de charger l'image et à la vérification du bon type. Cependant, cette méthode est moins efficace (sauf si vous allez à la charge de l'image de toute façon), mais sera probablement vous donner un résultat fiable (Être conscient du coût supplémentaire de chargement et de décompression aussi bien que possible la gestion des exceptions):
IsJpeg
ou certaines de vos suggestions. Depuis, c'est un exemple simple, je ne voulais pas le surcharger avec la gestion des exceptions, mais en général, je voudrais gérer les exceptions liées aux e / s de fichiers et les autorisations d'accès à un niveau supérieur dans la pile.Ouvrir le fichier comme un flux et regarder pour la nombre magique pour JPEG.
OMG, beaucoup de ces exemples de code sont faux, faux, faux.
EXIF des fichiers d'avoir un marqueur de 0xff*e1*, JFIF fichiers ont un marqueur de 0xff*e0*. Donc tout le code qui s'appuie sur 0xffe0 pour détecter un fichier JPEG manquez toutes EXIF des fichiers.
Voici une version qui permet de détecter à la fois, et peut facilement être modifié pour revenir seulement pour JFIF ou seulement pour les EXIF. (Utile lorsque vous essayez de récupérer vos photos de iPhone, par exemple).
4A 46 49 46
, mais vous êtes à la vérification de0x4649464a
. EXIF est45 78 69 66
, mais vous êtes à la vérification de0x66697845
. Je suppose que votre code est correct, mais pourquoi sont-ils à l'envers?Vous pouvez essayer de charger le fichier dans une Image, puis vérifiez le format
Vous pouvez également ouvrir le fichier et vérifier l'en-tête pour obtenir le type
ImageFormat.Equals
au lieu d'utiliser le==
de l'opérateur.Vous pourriez trouver de la documentation sur le format de fichier jpeg, plus précisément les informations d'en-tête. Puis essayez de lire ces informations à partir du fichier et de le comparer à celui qui est attendu jpeg octets d'en-tête.
Lire l'en-tête octets. Cet article contient des informations sur plusieurs types de formats d'image tels que JPEG:
L'Aide De L'Image En-Têtes De Fichier Pour Vérifier Le Format De L'Image
JPEG Informations d'en-Tête
Une fois que vous avez l'extension, vous pouvez utiliser une expression régulière pour la valider.
jpeg
là aussi, et sans doute passer une minute de la recherche d'autres moins courants jpeg extensions de fichier.Ce passe en boucle sur tous les fichiers dans le répertoire courant et de sortie si tout les fichiers trouvés avec le format JPG ou JPEG sont des images Jpeg.
Selon le contexte dans lequel vous êtes en train de regarder ce fichier, vous devez vous rappeler que vous ne pouvez pas ouvrir le fichier jusqu'à ce que l'utilisateur vous indique pour l'ouvrir.
(Le lien est une Raymond Chen entrée de blog.)
Vous pouvez utiliser le Chemin d'accès.GetExtension Méthode.
Le code ici:
http://mark.michaelis.net/Blog/RetrievingMetaDataFromJPEGFilesUsingC.aspx
Vous montre comment récupérer les Méta-Données. Je pense que cela pourrait lever une exception si votre image n'est pas valide JPEG.
La vérification de l'extension de fichier n'est pas assez que le nom de fichier peut être allongé.
Une façon rapide et sale est d'essayer et de charger l'image à l'aide de la classe Image et attraper toutes les exceptions:
Ce n'est pas l'idéal que vous pourriez obtenir toute sorte d'exception, tels que OutOfMemoryException, FileNotFoundException, etc. etc.
La méthode la plus radicale est de traiter le fichier en binaire et de s'assurer de l'en-tête correspond au format JPG. Je suis sûr que c'est décrit quelque part.
La meilleure façon serait de l'essayer et de créer une image en utilisant le Dessin.Bitmap (string) constructeur et voir si elle omet de le faire ou lève une exception. Le problème avec certaines des réponses sont cela: d'une part, l'extension est purement arbitraire, il pourrait être jpg, jpeg, jpe, bob, tim, que ce soit. Deuxièmement, en utilisant seulement l'en-tête n'est pas assez pour être sûr à 100%. Il peut déterminer avec certitude qu'un fichier n'est pas au format jpeg, mais ne peut pas garantir qu'un fichier est un fichier jpeg, l'arbitraire d'un fichier binaire pourrait avoir la même séquence d'octets au début.
Il suffit de prendre le type de support de fichier et vérifiez que:
après l'enregistrement de l'extension de fichier de lire les quatre premiers octets de l'image et les deux derniers octets de l'image comme ceci, faites cela pour les deux derniers octets de la valeur 255 , 217
pour d'autres peuvent le faire
Valider image à partir d'un fichier en C#
http://www.garykessler.net/library/file_sigs.html