C # .net identifie le fichier zip
Je suis actuellement en utilisant le SharpZip api pour gérer mes fichiers zip entrées. Il fonctionne splendide pour la compression et décompression des fichiers. Cependant, je vais avoir du mal à identifier si un fichier est une archive zip ou pas. J'ai besoin de savoir si il existe un moyen de détecter si un fichier de flux peut être décompressé. À l'origine, j'ai utilisé
FileStream lFileStreamIn = File.OpenRead(mSourceFile);
lZipFile = new ZipFile(lFileStreamIn);
ZipInputStream lZipStreamTester = new ZipInputStream(lFileStreamIn, mBufferSize);//not working
lZipStreamTester.Read(lBuffer, 0, 0);
if (lZipStreamTester.CanDecompressEntry)
{
La LZipStreamTester devient nul de tous les temps et de l'instruction if échoue. Je l'ai essayé avec/sans tampon. Quelqu'un peut-il donner quelque aperçu des raisons pour lesquelles? Je suis conscient que je peux vérifier l'extension de fichier. J'ai besoin de quelque chose qui est de plus en plus évident que cela. Je suis aussi conscient que zip a une magie #(PK quelque chose), mais ce n'est pas une garantie qu'il sera toujours là parce que ce n'est pas une exigence de la format.
Aussi j'ai lu .net 4.5 avoir native support zip si mon projet peut migrer à ce que, au lieu de sharpzip mais j'ai encore besoin de ne pas voir une méthode/param similaire à CanDecompressEntry ici: http://msdn.microsoft.com/en-us/library/3z72378a%28v=vs.110%29
Mon dernier recours sera d'utiliser un try catch et tenter de décompresser le fichier.
source d'informationauteur Sean Dunford
Vous devez vous connecter pour publier un commentaire.
C'est une classe de base pour un composant qui a besoin de gérer des données non compressées, PKZIP comprimé (sharpziplib) ou compressé avec GZip (construite en .net). Peut-être un peu plus que vous avez besoin, mais devrait vous permettre de continuer. Ceci est un exemple de l'utilisation de @PhonicUK suggestion pour analyser l'en-tête du flux de données. Les classes dérivées de vous voir dans la petite usine de mathod manipulé les spécificités de PKZip et de décompression GZip.
Vue https://stackoverflow.com/a/16587134/206730 référence
Vérifier les liens ci-dessous:
icsharpcode-sharpziplib-valider-fichier zip
Comment-faire-vérifier-si-un-fichier est compressé en c#
Fichiers ZIP toujours commencer avec 0x04034b50 (4 octets)
Voir plus d': http://en.wikipedia.org/wiki/Zip_(file_format)#File_headers
Exemple d'utilisation:
Vous pouvez soit:
Fichiers ZIP toujours commencer avec 0x04034b50 que ses 4 premiers octets ( http://en.wikipedia.org/wiki/Zip_(file_format)#File_headers )
Si vous êtes à la programmation pour le Web, vous pouvez vérifier le Contenu du fichier de Type: application/zip
Grâce à dkackman et Kiquenet pour les réponses ci-dessus.
Pour être complet, le code ci-dessous utilise la signature pour identifier les fichiers compressés (zip).
Vous avez alors la complexité que la plus récente de MS Office formats de fichier aussi match retour de cette signature de recherche (votre .docx et .fichiers xlsx, etc).
Comme l'a remarqué ailleurs, ce sont en effet des archives compressées, vous pouvez renommer les fichiers avec l' .extension zip et avoir un regard sur le XML à l'intérieur.
Code ci-dessous, la première effectue une vérification pour ZIP (compressé) en utilisant les signatures utilisées ci-dessus, et nous avons alors un contrôle a posteriori de la suite MS Office des paquets.
Notez que pour utiliser le Système.IO.De l'emballage.Package vous avez besoin d'une référence de projet à "WindowsBase" (qui est une .NET de l'assemblée de référence).