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

Lazarus Pascal Discussion :

Problèmes avec TFixedFormatDataSet.FileName [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 146
    Points
    146
    Par défaut Problèmes avec TFixedFormatDataSet.FileName
    Je n'ai aucun problème à ouvrir un fichier qui se trouve à la racine du disque dur, mais si je le mets dans mes documents, le fichier refuse de s'ouvrir. J'ai effectué plusieurs tests qui confirment que en dehors de mes documents, même si ce n'est pas à la racine, tout fonctionne correctement. Remplacer mes documents par son chemin absolu depuis la racine ne règle pas le problème.

    De plus, le programme est incapable de lire un fichier situé dans le même répertoire que le programme principal même en ajoutant un .\ devant le nom du fichier.

    J'ai l'impression que ce composant est très peu utilisé. Jusqu'à maintenant, il ne fonctionne qu'en fournissant un chemin absolu depuis la racine avec un fichier qui n'est pas dans mes documents. Ces restrictions n'étant pas dans la documentation, quasi inexistante. En Linux, il ne fonctionne pas du tout! Il est toujours incapable d'ouvrir le fichier d'entrée quelque soit son emplacement dans /home/pierre .

    Le nom de fichier doit comporter des restrictions non documentées. L'image attachée montre l'ouverture correcte du fichier e:\user\Travail\D12345678901234\yyy\k12345678901234567890\z.txt , la longueur ne semble pas causer problème. En fait, c'est l'ouverture d'une copie de z.txt situé dans le même répertoire que le fichier exécutable ou dans mes documents qui ne fonctionne pas.

    Nom : Test Fichier TRF.png
Affichages : 264
Taille : 27,0 Ko

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Nous fournir les messages d'erreur serait un plus, parce que là,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    hello,
    avec le code suivant sous windows 10, Lazarus 1.8.2 , le fichier fpc - avec des blancs.ssx (avec 1 enregistrement) dans mes documents, je n'ai pas d'erreur :
    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
    {$mode objfpc}
    {$h+}
    program testfix;
     
    uses DB,sdfdata,sysutils,lazfileutils;
     
    Procedure Dotest;
     
    Var
      I,Count : Integer;
     
    begin
      With TFixedFormatDataSet.Create(Nil) do
        try
          FileMustExist := False;
          FileName := AppendPathDelim(GetUserDir + 'mes Documents\') + 'fpc - avec des blancs.ssx';
          Schema.Add('First Name=15');
          Schema.Add('Last Name=15');
          Schema.Add('Email=20');
          Open;
          Count:=0;
          Try
            While Not EOF do
              begin
              Inc(Count);
              Writeln('Record : ',Count);
              For I:=0 to FieldCount-1 do
                Writeln(Fields[i].FieldName,' : ',Fields[i].AsString);
              Writeln('-------------------------------')  ;
              Next;
              end;
          Finally
            Close;
          end;
        finally
          free;
        end;
    end;
     
    begin
      DoTest;
    end.
    Record : 1
    First Name : Piet
    Last Name : Pompies
    Email : piet@pompi
    -------------------------------
    Ami calmant, J.P (sans T)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Nous fournir les messages d'erreur serait un plus, parce que là,
    Voici les messages d'erreurs. Le fichier se trouve dans le même répertoire que l'exécutable, mais il n'est pas détecté. Je comprends le message, ce que je ne comprends pas, c'est pourquoi le fichier disponible n'est pas ouvert.


    Nom : Test Fichier TRF Message Erreur.png
Affichages : 241
Taille : 16,1 Ko

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 146
    Points
    146
    Par défaut
    J'ai réduit le code à sa plus simple expression et il est toujours aussi fautif. Les champs ont été définis dans l'IDE. z.ssx existe et s'ouvre facilement dans notepad. Une copie placée dans e:\ s'ouvre sans problème.

    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
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, SdfData, db, FileUtil, Forms, Controls, Graphics, Dialogs,
      DBGrids, StdCtrls, lazfileutils;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        FixedFormatDataSet1: TFixedFormatDataSet;
        procedure Button1Click(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       FixedFormatDataSet1.FileName:=AppendPathDelim(GetUserDir + 'mes Documents\') + 'z.ssx';
       TRY
          FixedFormatDataSet1.Open;
     
       except
         On E: Exception DO
            ShowMessage(E.Message);
     
       end;
    end;
     
    end.
    Images attachées Images attachées  

  6. #6
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Citation Envoyé par Pierre le Grand Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FixedFormatDataSet1.FileName:=AppendPathDelim(GetUserDir + 'mes Documents\') + 'z.ssx';
    Essayez plutôt avec:
    Enfin, avec une version 'récente' de Windows (pas sur Windows XP, par exemple).

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 146
    Points
    146
    Par défaut
    J'ai fini par comprendre, il y a deux problèmes dont un seul concerne Lazarus. Le résultat de la fonction GetUserDir est invalide: il donne C: comme disque, mais le vrai disque devrait être E:. De plus, le vrai répertoire est e:\user, pas c:\Users, il y a un s de trop. Finalement, la machine utilise la version anglaise de Windows et le nom du répertoire est My Documents.

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomDuFichier:='E:\user\Travail\My Documents\z.ssx';
    tout fonctionne normalement.

    Avec la prolifération des SSD, les ordinateurs qui réservent le SSD pour les logiciels et qui mettent les utilisateurs sur un autre disque seront de plus en plus fréquents. Le bogue dans GetUserDir est donc gênant. Je suppose que c'est un problème similaire qui empêche l'ouverture du fichier situé dans le même répertoire que le fichier exécutable.

  8. #8
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Je ne suis pas certain que ce soit un bug de GetUserDir.

    Comme son nom l'indique, la fonction est sensée renvoyer le répertoire utilisateur (i.e. profile folder: cf. https://www.freepascal.org/docs-html...etuserdir.html).

    Et a priori (sauf manip compliquée), ce répertoire est -probablement- toujours sur "c:\users\votre_nom_utilisateur". Vous pouvez toujours faire une commande "dir %userprofile%" pour le vérifier (par exemple).

    Par contre, le répertoire "MesDocuments" a semble-t-il été déplacé. Mais là, à partir du moment où le déplacement est fait par l'utilisateur, il peut être n'importe où: pourquoi pas sur "e:\goodlucktofindmyname\lol\" , par exemple ?

    Mais le but de la fonction GetUserDir n'est pas de trouver ce répertoire "MesDocuments"; uniquement le répertoire utilisateur.

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par FChrisF Voir le message
    Je ne suis pas certain que ce soit un bug de GetUserDir.

    Comme son nom l'indique, la fonction est sensée renvoyer le répertoire utilisateur (i.e. profile folder: cf. https://www.freepascal.org/docs-html...etuserdir.html).

    Et a priori (sauf manip compliquée), ce répertoire est -probablement- toujours sur "c:\users\votre_nom_utilisateur". Vous pouvez toujours faire une commande "dir %userprofile%" pour le vérifier (par exemple).

    Par contre, le répertoire "MesDocuments" a semble-t-il été déplacé. Mais là, à partir du moment où le déplacement est fait par l'utilisateur, il peut être n'importe où: pourquoi pas sur "e:\goodlucktofindmyname\lol\" , par exemple ?

    Mais le but de la fonction GetUserDir n'est pas de trouver ce répertoire "MesDocuments"; uniquement le répertoire utilisateur.
    Merci! Cette fonction ne retourne pas la même chose sur Windows et sur Linux.

    J'ai lancé un dir %userprofile% et cela m'a dirigé vers le disque c. Effectivement, mes documents pourrait avoir été redirigé n'importe-où. C'est plus simple de déterminer le chemin vers l'exécutable avec ExtractFilePath(ParamStr(0)); et surtout, c'est plus fiable.

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

Discussions similaires

  1. Problème avec la propriété Filename de mon controle MediaPlayer
    Par dlefebvre dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/08/2013, 23h10
  2. Problème avec : MyProc.StartInfo.FileName
    Par Freud44 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/10/2009, 16h29
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 19h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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