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 :

Problème de droit d'accès à mes propres fichiers


Sujet :

Langage Delphi

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 369
    Billets dans le blog
    1
    Par défaut Problème de droit d'accès à mes propres fichiers
    Bonjour,

    J'étais sous W10 et je suis en train de passer sous W11.
    J'utilise Delphi 6 Personal Edition.

    Actuellement, j'essaie d'utiliser "My Little Base" pour gérer un petit système de bases de données utilisant un fichier CSV.
    Je l'ai téléchargé ici: http://mylittlebase.free.fr/
    Mais c'est disponible ) de multiples endroits.

    Le programme de démo fonctionne bien.

    J'ai donc commencé à créer un premier programme à titre d'essai.
    Il s'agit d'un fichier de contacts simpliste, juste pour explorer les concepts.
    Je peux créer une nouvelle base (sauvegardé dans un fichier CSV) avec 3 enregistrements, lors du démarrage initial du programme.
    Lors du démarrage suivant, le programme est supposé réouvrir et charger la base existante.

    Et là, patatras, j'ai une erreur de droit d'accès en ouverture, sur mon propre fichier, créé par mon propre programme !

    Je suis dans un compte Admin, et j'exécute mon programme avec les privilèges Admin.
    J'ai vérifié: j'ai tous les droits d'accès sur le fichier:
    Nom : aa1.png
Affichages : 119
Taille : 33,3 Ko

    Voici le fichier créé lors du premier passage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nom;Prenom;Tel 1;Tel 2;Mail 1;Mail 2
    Dupont;;0601328562;0125688500;jacques.dupont@orange.fr;jdupont32@gmail.com
    Dupont;;0154896524;0756892545;annemarie.dupont@orange.fr;
    Martinet;;;;paul.martinett@laposte.fr;
    Et lors de la réouverture du fichier au deuxième passage, il y a une erreur IoResult=3 lors de la commande Reset après Assign du fichier.
    Cela de passe dans la fonction TMlb2.LoadFromCSVFile contenue dans l'unité mlb2.pas:
    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
    function TMlb2.LoadFromCSVFile(filename1: string): Boolean;
    var F: TextFile;
        fline, token: string;
        is_first_line: boolean;
        i, k: LongInt;
    begin
         init_error;
    showmessage('mlb2.LoadFromCSVFile a '+filename1);
         AssignFile(F, filename1);
    showmessage('mlb2.LoadFromCSVFile b');
         {$i-}
            Reset(F);
         {$i+}
    showmessage('mlb2.LoadFromCSVFile c');
         If (Trim(filename1)='') or (IoResult<>0) then begin
            {CloseFile(F);}
            MLBError := MLB_ERROR_IO;     // <======== ici, "Accès au fichier refusé" dans commande Reset !!!!!!!!!
            MLBErrorComment := '1-Unable to open the file for reading';
            Result := False;
            Exit;
         end else begin
             nameFromFilename(filename1);
             Result := True;
             Init;
             is_first_line := True;
             While Not Eof(F) Do begin
                   ReadLn(F, fline);
                   if (not is_first_line) and (Trim(fline)<>'') then begin
                      AddRow;
                   end else begin
                   end;
                   i := 1;
                   k := 0;
                   token := '';
                   while (i<=length(fline)) do begin
                         if (fline[i] = '\') then begin
                            if (i<length(fline)) then begin
                                if (UpperCase(fline[i+1])='N') then begin
                                   token := token + #13 + #10;
                                end else begin
                                   token := token + fline[i+1];
                                end;
                                Inc(i, 1);
                            end else begin
                                token := token + fline[i];
                            end;
                         end else if (fline[i]=CSVSeparator) then begin
                              if is_first_line then begin
                                 AddField(token);
                              end else begin
                                 lastrow.Strings[k] := token;
                              end;
                              Inc(k, 1);
                              token := '';
                         end else begin
                              token := token + fline[i];
                         end;
                         Inc(i, 1);
                   end;
                   if is_first_line then begin
                     AddField(token);
                   end else begin
                     lastrow.Strings[k] := token;
                   end;
                   is_first_line := False;
             end;
             CloseFile(F);
         end;
    end;
    (j'ai mis quelques ShowMessage pour localiser le problème, et j'ai testé la valeur de IoResult par le debuggeur).

    Je n'arrive pas à comprendre pourquoi je n'arrive pas à ouvrir mon propre fichier, alors que le programme
    Voici ma procédure de TForm1.FormCreate qui fait le travail:
    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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ContactFile := Extractfilepath(ParamStr(0))+'Contacts.csv';
      modified := false; 
        Contacts.Init;
        Contacts.AddField('Nom');
        Contacts.AddField('Prenom');
        Contacts.AddField('Tel 1');
        Contacts.AddField('Tel 2');
        Contacts.AddField('Mail 1');
        Contacts.AddField('Mail 2');
     
        Contacts.AddRow;
        Contacts.SetData('Nom','Dupont');
        Contacts.SetData('Prénom','Jacques');
        Contacts.SetData('Tel 1','0601328562');
        Contacts.SetData('Tel 2','0125688500');
        Contacts.SetData('Mail 1','jacques.dupont@orange.fr');
        Contacts.SetData('Mail 2','jdupont32@gmail.com');
     
        Contacts.AddRow;
        Contacts.SetData('Nom','Dupont');
        Contacts.SetData('Prénom','Annemarie');
        Contacts.SetData('Tel 1','0154896524');
        Contacts.SetData('Tel 2','0756892545');
        Contacts.SetData('Mail 1','annemarie.dupont@orange.fr');
        Contacts.SetData('Mail 2','');
     
        Contacts.AddRow;
        Contacts.SetData('Nom','Martinet');
        Contacts.SetData('Prénom','Paul');
        Contacts.SetData('Tel 1','');
        Contacts.SetData('Tel 2','');
        Contacts.SetData('Mail 1','paul.martinett@laposte.fr');
        Contacts.SetData('Mail 2','');
     
        modified := true;
        showmessage('fichier a été créé');
      end else begin
        if  Contacts.LoadFromCSVFile(ContactFile) then showmessage('fichier a été chargé')
                                                  else showmessage('Load error '+inttostr(Contacts.MLBError)+'  '+Contacts.MLBErrorComment);
      end;
     
      if not Contacts.GoFirst then showmessage('error GoFirst');
      showmessage(Contacts.GetData('Nom'));
      Form1.Caption := 'Contacts - '+ContactFile;
      if modified then Form1.Caption := 'Contacts - '+ContactFile + ' ' + '*  (' + inttostr(Contacts.RowCount) + ' contacts)'
                  else Form1.Caption := 'Contacts - '+ContactFile + '  (' + inttostr(Contacts.RowCount) + ' contacts)';
    end;
    Là encore, quelques ShowMessage pour suivre à la trace...

    Le projet complet est dans un fichier ZIP en pièce jointe.

    Je n'avais pas encore rencontré ce genre de problème de droit d'accès tant que j'étais sous W10.
    Qu'est-ce que j'ai manqué ?
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [C#]droit d'accès d'un fichier
    Par bilb0t dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/09/2007, 10h19
  2. droits d'acces à un fichier
    Par pipip dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 13/01/2007, 01h59
  3. Réponses: 4
    Dernier message: 05/01/2007, 18h06
  4. [VB.net] donner droits d'acces sur des fichiers
    Par pikho dans le forum ASP.NET
    Réponses: 4
    Dernier message: 06/06/2006, 09h33
  5. Droits d'accès sur les fichiers
    Par billbocquet dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 11/01/2006, 11h24

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