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

Langage Delphi Discussion :

detecter le Type de Fichier


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 29
    Points
    29
    Par défaut detecter le Type de Fichier
    Salut , j'ai trouvé cette fonction au delphi fr, elle sert à detecter le Type de fichier , mais ça 'a pas fonctionné , quel est le problem ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    Type
      TTxtFileType = (txTxtOrBin{Default},
        txUTF8,
        txUNICODE,
        txUNIBIG
      );
     
      TTxtFileSign = record
         Code : TTxtFileType;
         Sign : LongWord;
         Mask : LongWord;
         end;
     
         const
      TxtSignsCount   = 3;
      TxtSign_UTF8    : TTxtFileSign = (Code: txUTF8;    Sign:$00BFBBEF; Mask: $00FFFFFF);
      TxtSign_UNICODE : TTxtFileSign = (Code: txUNICODE; Sign:$0000FEFF; Mask: $FF00FFFF);
      TxtSign_UNIBIG  : TTxtFileSign = (Code: txUNIBIG;  Sign:$0000FFFE; Mask: $00FFFFFF);
     
    var
    TxtFileSigns : array[0..TxtSignsCount-1] of TTxtFileSign;
     
    type
    TForm1 = class(TForm)
        Button1: TButton;
        op: TOpenDialog;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        function TypeOfTextfile(const filename : string) : TTxtFileType;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    function TForm1.TypeOfTextfile(const filename: string): TTxtFileType;
    var
      Flux : TFileStream;
      Sign : LongWord;
      N    : integer;
    begin
     
      Flux := TFileStream.Create(FileName, fmOpenRead);
      try
     {# 1st With BOOM #}
        Flux.Read(Sign, 4);
      finally
        Flux.Free;
      end;
     {# Default # }
      result := txTxtOrBin;
     
      for N := 0 to High(TxtFileSigns) do
      begin
     
        if (Sign and TxtFileSigns[N].Mask) = TxtFileSigns[N].Sign then
        begin
          result := TxtFileSigns[N].Code;
          break;
        end;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if not op.Execute then exit;
    Case  TypeOfTextfile(op.FileName) of
    txTxtOrBin:Label2.Caption:='TxtOrBin';
    txUTF8:Label2.Caption:='UTF8';
    txUNICODE:Label2.Caption:='UNICODE';
    txUNIBIG:Label2.Caption:='UNIBIG';
    end;
    end;
    Merçi

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    En tout cas en unicode, le préambule est un word et non un dword.
    Je le lis personnellement directement dans un WideChar.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    const
      UnicodeFileTag = #$FEFF;
    var
      C :WideChar;
    ...
      try
        Stream.Read(C, 2);
        Unicode := C = UnicodeFileTag;
      except
        Unicode := FALSE;
      end;
      ...

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    J'ai quant même fait un petit essai .

    Avec un simple fichier créé avec le NotePad et sauvé dans les trois formats.
    Pour l'unicode (et l'unicode big endian) le préambule est bien sur 2 bytes. Il faut modifier ton masque à $0000FFFF.

    Et n'oublie pas de remplir ton tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      TxtFileSigns : array[0..2] of TTxtFileSign = (
        (Code: txUTF8;    Sign:$00BFBBEF; Mask: $00FFFFFF),
        (Code: txUNICODE; Sign:$0000FEFF; Mask: $0000FFFF),
        (Code: txUNIBIG;  Sign:$0000FFFE; Mask: $0000FFFF));

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    Merçi Andnotor , j'ai une autre Question pour les fichiers text ( ASCII - fichier text normal - ) comment je peux les detceter ( a mon avis ils n'ont pas un BOM ) ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    Je ne vois pas non plus !

Discussions similaires

  1. detecter le type du fichier qui va etre enregistrer dans la base
    Par lamis2009 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 18/05/2010, 16h27
  2. Linux n'arrive pas à detecter le type de systeme de fichier
    Par sneb5757 dans le forum Administration système
    Réponses: 2
    Dernier message: 03/11/2007, 17h04
  3. Réponses: 10
    Dernier message: 18/11/2003, 18h01
  4. Comment detecter le type d'un objet?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/06/2003, 15h23
  5. Bloquer le téléchargement de certains types de fichiers
    Par Nikos dans le forum Développement
    Réponses: 4
    Dernier message: 23/12/2002, 20h54

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