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 :

TFileStream et caractères bizarres


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut TFileStream et caractères bizarres
    Bonjour à tous,

    J'ai un problème avec TFileStream sur delphi 7, je fais le simple code ci-dessous.
    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.Button1Click(Sender: TObject);
    var
      fs: TFileStream;
      buffer: array[0..255] of char;
      str: string;
      len: integer;
    begin
      fs:= TFileStream.Create('D:\Travaux\test.txt', fmOpenReadWrite or fmShareDenyNone);
      try
        str:= 'aaaaaa';
        //fs.Position:= 0;
        //len:= fs.Read(buffer, Length(buffer));
        fs.seek(0, soFromEnd);
        fs.Write(PChar(str)^, Length(str));
      finally
        fs.Free;
      end;
    end;
    Le contenu du fichier test.txt contient seulement test123 et j'essaye d'ajouter simplement des "a" à la fin, je n'ai aucun problème au bureau, mais quand j'essaye sur mon pc, le contenu du fichier test.txt devient test123慡慡慡, alors qu'il devrait écrire test123aaaaaa.
    WIN7 64 sur les deux pcs
    Quelqu'un aurait-il une idée?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Parfois, il enregistre test123aa dans le fichier test.txt au lieu de test123aaaaaa

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 325
    Points
    11 325
    Billets dans le blog
    6
    Par défaut
    que valent SizeOf(Char) et Stream.Size après avoir juste lu 'test123' ?
    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 !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    SizeOf(char) vaut 2 et fs.Size vaut 16

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Jeankiki Voir le message
    SizeOf(char) vaut 2 et fs.Size vaut 16
    delphi 7 et tu es en wideChar !!!

    essaye de forcer le Ansi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    str: AnsiString;
    ...
    fs.Write(PAnsiChar(str)^, Length(str));

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Malheureusement, ce changement ne fait rien du tout.

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Jeankiki Voir le message
    SizeOf(char) vaut 2 et fs.Size vaut 16
    très surprenant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      fs.Write(str[1], Length(str) * SizeOf(Char));
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    @Paul : J'ai essayé cette ligne de code sur mon pc au bureau mais il me double le nombre de caractère 'a' sur Delphi 7, j'obtiens test123aaaaaaaaaaaa
    J'ai aussi refait un test sur Delphi xe, et voici ce que j'obtiens quand j'ouvre avec notepad++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    test123anulanulanul
    en utilisant la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fs.Write(PChar(str)^, Length(str));

Discussions similaires

  1. [AJAX] Caractères bizarres avec AJAX
    Par davinout dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 02/04/2007, 22h33
  2. caractère bizarre devant mon menu
    Par dunbar dans le forum Langage
    Réponses: 2
    Dernier message: 16/07/2006, 19h40
  3. Réponses: 6
    Dernier message: 24/03/2006, 13h50
  4. [FTP] XmlHttpRequest + caractères bizarres
    Par masseur dans le forum Langage
    Réponses: 18
    Dernier message: 25/01/2006, 16h45
  5. Réponses: 6
    Dernier message: 06/12/2005, 09h41

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