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 :

Comment vérifier si un fichier est corrompu


Sujet :

C#

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    16
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Comment vérifier si un fichier est corrompu
    Bonjour,

    je cherche un moyen pour vérifier si des fichiers sont corrompus(de type pdf, doc, rtf, xls,txt)?
    J'ai essayé via un FileOpen() mais il n'est pas possible d'ouvrir les fichiers autre que les txt.

    Quelqu'un a une idée?

  2. #2
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut,
    D'après ton affirmation sur le FileOpen j'ai l'impression que tu n'as aucune idée de ce qu'est un fichier

    En fait, l'extension n'a de pas de réelle signification. Les développeurs s'en servent pour savoir comment interpréter les données (bien qu'il ne s'agit pas d'un moyen très fiable).

    Quel que soit le fichier, quelle que soit son extension, un fichier contient uniquement des octets binaires.
    Ce qui fait qu'un txt donne du texte et qu'un bmp donne une image ce n'est que la façon d'interpréter les données.

    Par exemple, pour du txt, on associe une lettre à un nombre, ensuite quand on lit un nombre dans le fichier, par exemple 65, on sait qu'il s'agit de la lettre A.
    Cette interprétation est implicite et tu n'as donc pas à la faire.
    Pour un bmp on associe un groupe d'octet à des valeurs de bleu, de rouge et de vert (le mélange donnant la couleurs que l'on souhaite) pour un pixel donné. L'ordre de ces groupe d'octet donne l'ordre des pixel.
    Cette interprétation est faite par System.Drawing.Bitmap.

    Le RTF est du texte balisé, tu pourra donc l'ouvrir, de plus un contrôle RichTextBox va te permettre de l'afficher.

    Par contre, pour toutes les autres, c'est à toi d'écrire l'interprétation ou d'utiliser une bibliothèque qui le fait pour toi.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Déjà, FileOpen ça n'existe même pas en C#... Il y a StreamReader (qui sert effectivement à lire des fichiers texte) et FileStream (pour n'importe quel type de fichier)

    Il n'y a pas de moyen générique pour vérifier qu'un fichier est corrompu, il faut au moins avoir une information de référence, par exemple un hash MD5 ou SHA1.

  4. #4
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    tomlev
    Il n'y a pas de moyen générique pour vérifier qu'un fichier est corrompu, il faut au moins avoir une information de référence, par exemple un hash MD5 ou SHA1.
    MD5 et SHA1 est utilise pour verifier si on a telecharger ou copier le fichier correctement (comparrer deux fichiers pour verifier si ils sont identique )!!!!

    Déjà, FileOpen ça n'existe même pas en C#.
    exactement tomlev ,mais il existe File.open qui retourne un Filestream sur ce fichier, mais je pense pas que il sert a quelque chose pour ton probleme. puisque ce stream peut lire le fichier en txt si il est de type text ou binaire si il n'est pas de type text(avec l'utilisation d'un stream pour lire le FileStream).

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par azstar Voir le message
    comparrer deux fichiers pour verifier si ils sont identique
    Ben non... un hash MD5 fait 128 bits, ça peut pas suffire à représenter tous les fichiers possibles et imaginables. Même si c'est assez rare, il peut y avoir des collisions (i.e. 2 fichiers différents avec le même hash), donc c'est pas un critère suffisant pour vérifier si 2 fichiers sont identiques. En revanche, si le hash est différent, tu peux être sûr que les fichiers sont différents...

    Citation Envoyé par azstar Voir le message
    exactement tomlev ,mais il existe File.open qui retourne un Filestream sur ce fichier, mais je pense pas que il sert a quelque chose pour ton probleme. puisque ce stream peut lire le fichier en txt si il est de type text ou binaire si il n'est pas de type text(avec l'utilisation d'un stream pour lire le FileStream).
    J'ai rien compris à ta phrase
    "un stream pour lire le FileStream" ? Un FileStream est déjà un stream, pourquoi tu veux un stream pour le lire ?

  6. #6
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    exactement tomlev ,mais il existe File.open qui retourne un Filestream sur ce fichier, mais je pense pas que il sert a quelque chose pour ton probleme. puisque ce stream peut lire le fichier en txt si il est de type text ou binaire si il n'est pas de type text(avec l'utilisation d'un stream pour lire le FileStream).
    --->
    ce stream peut lire le fichier d'une maniere binaire mais si tu veux lire ton fichier en txt (lire les caracteres ) vous avez besoin d'un stream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     StreamReader SR1 = new StreamReader(File.Open(path, FileMode.Open));
    je ssi bien que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        StreamReader SR2 = new StreamReader(path);
    il suffit pour lire un fichier . mais si vous avez un FileStream et tu vx lire le fichier en binaire la vous avez besoin de SR1 .

    j'espere que je suis assez claire . et encore desolé tomlev
    et merci pour l'information.


    moi ,j'ai utilise le MD5 pour verifier que les fichiers que telecharges et les fichiers que je cope sont identiques (il n' a pas de erreur de telechargement )

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par azstar Voir le message
    ce stream peut lire le fichier d'une maniere binaire mais si tu veux lire ton fichier en txt (lire les caracteres ) vous avez besoin d'un stream
    D'un StreamReader, pas d'un stream... en plus c'est bon dans ton code

    Citation Envoyé par azstar Voir le message
    moi ,j'ai utilise le MD5 pour verifier que les fichiers que telecharges et les fichiers que je cope sont identiques (il n' a pas de erreur de telechargement )
    En général, si le MD5 et la taille sont correctes, on peut supposer que le fichier n'est pas corrompu. Mais comme je le disais, ce n'est pas fiable à 100%...

Discussions similaires

  1. Comment vérifier si un fichier/répertoire est accessible ?
    Par sofien dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/07/2013, 23h08
  2. Comment vérifier qu'un fichier est déjà ouvert ?
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 04/08/2011, 12h23
  3. [XL-2000] Comment faire pour vérifier qu'un fichier est bien présent dans un emplacement précis
    Par Avinetor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/06/2009, 14h12
  4. Réponses: 11
    Dernier message: 11/01/2008, 19h13
  5. Unix - Comment savoir si un fichier est ouvert
    Par freddyboy dans le forum C
    Réponses: 7
    Dernier message: 06/10/2004, 15h53

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