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 :

Violation d'acces et fichier INI


Sujet :

Langage Delphi

  1. #1
    Provisoirement toléré
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 73
    Points : 32
    Points
    32
    Par défaut Violation d'acces et fichier INI
    Bonjour

    Dans mon gestionnaire de configuration de mon programme , j'enregistre les différents infos dans un fichiers Ini, dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TEnvCfg.Save;
    begin
      with TIniFile.Create(DirCfg.CfgDir + 'Env.cfg') do
        try
          WriteString('File-Explorer', 'Masks', fFileExplorerMasks);
        finally
          Free;
        end;
    end;
    Ce code qui marche partout quand je l'utilise, ne fonctionne pas aujourd'hui, j'ai une violation d'accès sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      with TIniFile.Create(DirCfg.CfgDir + 'Env.cfg') do
    Alors que la même ligne pour l'ouverture des différentes infos marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TEnvCfg.Load;
    begin
      with TIniFile.Create(DirCfg.CfgDir + 'Env.cfg') do
        try
          fFileExplorerMasks := ReadString('File-Explorer', 'Masks', '');
        finally
          Free;
        end;
    end;
    Auriez vous une idée?

    Merci et bon week end.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Soit ton objet TEnvCfg n'existe pas soit DirCfg.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    DirCfg n'est pas assigné ?

  4. #4
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    "ce code ne fonctionne pas aujourd'hui."

    Je pense que le problème est que ton fichier ini a l'extension CFG que l'on peut classer dans les extensions "système" windows.
    Un fichier .cfg est associé à une application installée et recensée dans la base de registres.
    Regarde ce lien : http://www.solvusoft.com/fr/file-ext...extension-cfg/

    Thierry

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Je pense que le problème est que ton fichier ini a l'extension CFG que l'on peut classer dans les extensions "système" windows.
    Un fichier .cfg est associé à une application installée et recensée dans la base de registres.
    Ça pourrait être un problème avec ShellExecute mais là, aucun rapport

  6. #6
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    @Andnotor

    Tu as raison : aucun rapport.
    Ce qui m'avait mis la puce à l'oreille, c'est que la lecture du fichier ini se fait sans problème. Donc le path est bon.
    L'erreur à la sauvegarde ressemble furieusement à un accès non autorisé à l'écriture.

    Bon W.E.

    Thierry

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par ThWilliam Voir le message
    Ce qui m'avait mis la puce à l'oreille, c'est que la lecture du fichier ini se fait sans problème. Donc le path est bon.
    L'erreur à la sauvegarde ressemble furieusement à un accès non autorisé à l'écriture.
    Vu d'où vient l'erreur ( with TIniFile.Create(DirCfg.CfgDir + 'Env.cfg') do), aucun accès en écriture n'a encore été fait.
    Comme l'a dit Andnotor, DirCfg n'est pas affecté lors de la création.
    Lors de la sauvegarde, l'object DirCfg n'a t-il pas été déjà détruit ?
    Philippe.

  8. #8
    Provisoirement toléré
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    Bonjour, voici le code de l'unité complète, J'initialise les différentes classes dans le code du projet en appelant IniOpts. et je la détruit dans la procédure Destroy de la fiche principale avec FreeOpts.

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    unit uCfg;
     
    interface
     
    type
      TDirCfg = class
        private
          fAppDir: string;
          fCfgDir: string;
          fIcoDir: string;
        public
          constructor Create;
     
          property AppDir: string read fAppDir write fAppDir;
          property CfgDir: string read fCfgDir write fCfgDir;
          property IcoDir: string read fIcoDir write fIcoDir;
      end;
     
      TEnvCfg = class
        private
          // EXPLORATEUR DE FICHIERS \\
          fFileExplorerMasks: string;
        public
          constructor Create;
          procedure Load;
          procedure Save;
          procedure SetDef;
          // EXPLORATEUR DE FICHIERS \\
          property FileExplorerMask: string read fFileExplorerMasks write fFileExplorerMasks;
      end;
     
    procedure InitOpts;
    procedure FreeOpts;
     
    var
      DirCfg: TDirCfg = nil;
      EnvCfg: TEnvCfg = nil;
     
    implementation
     
    uses
      SysUtils, Forms, IniFiles;
     
    procedure FreeOpts;
    begin
      EnvCfg.Save;
      EnvCfg.Free;
     
      DirCfg.Free;
    end;
     
    procedure InitOpts;
    begin
      if assigned(DirCfg) then
        DirCfg := TDirCfg.Create;
     
      if assigned(EnvCfg) then
        EnvCfg := TEnvCfg.Create;
    end;
     
    // TDIRCFG \\
    constructor TDirCfg.Create;
    begin
      fAppDir := ExtractFilePath(Application.ExeName);
      fCfgDir := fAppDir + 'Configuration\';
      fIcoDir := fAppDir + 'Glyphs\';
    end;
     
     
    // TENVCFG \\
    constructor TEnvCfg.Create;
    begin
      SetDef;
      Load;
    end;
     
    procedure TEnvCfg.Load;
    begin
      with TIniFile.Create(DirCfg.CfgDir + 'Env.cfg') do
        try
          fFileExplorerMasks := ReadString('File-Explorer', 'Masks', '');
        finally
          Free;
        end;
    end;
     
    procedure TEnvCfg.Save;
    begin
      with TIniFile.Create(DirCfg.CfgDir + 'Env.cfg') do
    //    try
    //      WriteString('File-Explorer', 'Masks', fFileExplorerMasks);
    //    finally
    //      Free;
    //    end;
    end;
     
    procedure TEnvCfg.SetDef;
    begin
      fFileExplorerMasks := '';
    end;
     
    end.
    Bon week-end

  9. #9
    Provisoirement toléré
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    Bonjour

    En faites apres reflexion et la lecture des reponses, j'ai trouvé le probleme:

    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      if assigned(DirCfg) then
        DirCfg := TDirCfg.Create;
     
      if assigned(EnvCfg) then
        EnvCfg := TEnvCfg.Create;
    j'aurai du mettre NOT avant les différents assignation.

    Bonne journée a vous!!!!!!!!!!!!!!!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/01/2014, 16h19
  2. Accès au fichier config.ini
    Par jemtlse dans le forum Débuter
    Réponses: 14
    Dernier message: 12/02/2013, 18h54
  3. Acces fichiers ini
    Par zerobug dans le forum C#
    Réponses: 2
    Dernier message: 11/06/2008, 21h55
  4. Réponses: 5
    Dernier message: 15/04/2007, 19h18
  5. faire un fichier .ini
    Par florent dans le forum C++Builder
    Réponses: 14
    Dernier message: 31/05/2002, 23h06

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