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

Delphi Discussion :

TFileStream :assigner une variable avec le contenu du fichier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut TFileStream :assigner une variable avec le contenu du fichier
    bonjour a tous,

    j'essaye avec une bete boite de dialogue et un bouton de transferer le contenu d'un fichier dans une variable mais j'ai du mal a comprendre l'utilisation du 1er argument de la méthode : TFileStream.Read(varBuffer,Count)
    l'aide ne decrit pas la maniere de recuperer le contenu du fichier avec varBuffer ni de l'utiliser d'ailleurs ...
    j'ai essayé de déclarer ma variable buffer de type String mais j'avais desplantages avec les gros fichiers donc je suis passé en AnsiString ... la j'ai plus de plantage mais la variable est toujours vide et la taille lu est égal a 0

    quelqu'un sait comment recuperer le contenu de ce fichier et l'assigner a une variable en utilisant ce systeme en une fois et sans boucle ?
    je joins le code.


    merci


    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
     
    procedure TForm1.btOuvrirClick(Sender: TObject);
    var tfFile:TFileStream;
    var inTaille:integer;
    var buffer:string;
    begin
    	if OpenDialog1.Execute() then
    		begin
    			tfFile := TFileStream.create(OpenDialog1.FileName, fmOpenRead, fmShareDenyWrite);
    			tfFile.Seek(soFromBeginning, 0);
    			inTaille := tfFile.read(buffer, tfFile.Size);
    			ShowMessage('taille lu : '+IntToStr(inTaille)+#10#13+'taille buffer : '+IntToStr(length(buffer)));
    			tfFile.Free();
    		end
    	else
    		begin
    			Memo1.Text := '';
    		end
    end;

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    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
    procedure TForm1.btOuvrirClick(Sender: TObject);
    var tfFile:TFileStream;
    var inTaille:integer;
    var buffer:string;
    begin
        if OpenDialog1.Execute() then
            begin
                tfFile := TFileStream.create(OpenDialog1.FileName, fmOpenRead, fmShareDenyWrite);
                tfFile.Seek(soFromBeginning, 0);
                SetLength(buffer, tfFile.Size);
                inTaille := tfFile.read(buffer[1], tfFile.Size);
                ShowMessage('taille lu : '+IntToStr(inTaille)+#10#13+'taille buffer : '+IntToStr(length(buffer)));
                tfFile.Free();
            end
        else
            begin
                Memo1.Text := '';
            end
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    sjrd, c'est bien ce qu'il manquait.

    Voilà un extrait de la bibliothèque Jedi JCL :
    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
    function FileToString(const FileName: string): AnsiString;
    var
      fs: TFileStream;
      Len: Integer;
      {$IFDEF CLR}
      Buf: array of Byte;
      {$ENDIF CLR}
    begin
      fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
      try
        Len := fs.Size;
        SetLength(Result, Len);
        if Len > 0 then
        {$IFDEF CLR}
        begin
          SetLength(Buf, Len);
          fs.ReadBuffer(Buf, Len);
          Result := Buf;
        end;
        {$ELSE}
          fs.ReadBuffer(Result[1], Len);
        {$ENDIF CLR}
      finally
        fs.Free;
      end;
    end;
     
    procedure StringToFile(const FileName: string; const Contents: AnsiString);
    var
      fs: TFileStream;
      Len: Integer;
    begin
      fs := TFileStream.Create(FileName, fmCreate);
      try
        Len := Length(Contents);
        if Len > 0 then
        {$IFDEF CLR}
          fs.WriteBuffer(BytesOf(Contents), Len);
        {$ELSE}
          fs.WriteBuffer(Contents[1], Len);
        {$ENDIF CLR}
      finally
        fs.Free;
      end;
    end;

  4. #4
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    ca ne solutionne pas le probleme, la var buffer reste toujours vide et la taille lu est egal a 0
    j'essaye d'assigner le contenu de buffer a un champ memo pour la verif :
    Memo1.Text := buffer;
    mais rien

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 937
    Billets dans le blog
    6
    Par défaut
    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
     
    procedure TForm1.btOuvrirClick(Sender: TObject); var tfFile:TFileStream; var inTaille:integer; var buffer:string; begin if OpenDialog1.Execute() then begin tfFile := TFileStream.create(OpenDialog1.FileName, fmOpenRead, fmShareDenyWrite); tfFile.Seek(soFromBeginning, 0); SetLength(buffer, tfFile.Size); inTaille := tfFile.read(@buffer[1], tfFile.Size); ShowMessage('taille lu : '+IntToStr(inTaille)+#10#13+'taille buffer : '+IntToStr(length(buffer))); tfFile.Free(); end else begin Memo1.Text := ''; end end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    maintenant j'ai une erreur
    [Erreur] Unit1.pas(78): Un objet constante ne peut être passé comme paramètre Var
    ca ne peut pas etre aussi compliqué de faire une simple assignation ?


    -----
    j'ai testé divers soluces et en essayant ceci :
    inTaille := tfFile.read(buffer[1], tfFile.Size);
    ca fonctionne

    merci

    j'ai l'impression de nager en pleine 4eme dimension
    je deteste ne pas comprendre quelque chose

  7. #7
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par tourlourou
    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
     
    procedure TForm1.btOuvrirClick(Sender: TObject); var tfFile:TFileStream; var inTaille:integer; var buffer:string; begin if OpenDialog1.Execute() then begin tfFile := TFileStream.create(OpenDialog1.FileName, fmOpenRead, fmShareDenyWrite); tfFile.Seek(soFromBeginning, 0); SetLength(buffer, tfFile.Size); inTaille := tfFile.read(buffer[1], tfFile.Size);//sans @ ShowMessage('taille lu : '+IntToStr(inTaille)+#10#13+'taille buffer : '+IntToStr(length(buffer))); tfFile.Free(); end else begin Memo1.Text := ''; end end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le contenu d'une variable avec liste déroulante
    Par SteffieLili dans le forum QlikView
    Réponses: 8
    Dernier message: 19/05/2014, 17h56
  2. Réponses: 14
    Dernier message: 23/03/2011, 20h39
  3. [PHP 4] Affichage d'une image avec chemin contenu dans une variable
    Par terrysharp dans le forum Langage
    Réponses: 1
    Dernier message: 16/07/2009, 14h54
  4. executer une requete avec le contenu d'une variable
    Par giloo(94) dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/02/2007, 01h58
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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