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

Turbo Pascal Discussion :

[TP]DosError 13


Sujet :

Turbo Pascal

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut [TP]DosError 13
    Bonjour à chacun,

    Voici un fragment de code qui fonctionne dans une partie du programme et dans une autre renvoie l'erreur 13 du dos.
    Je ne trouve rien sur cette erreur dans la doc de TP7...

    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
    GetDate(an, mois, jour, j_s);//récupérer la date syst
    GetTime(heure, minute, sec, sec100);// récupérer l'heure
    // convertir en Date_Time
    with DateT do
    begin
      year :=an;// tous word
      month :=mois;
      day := jour;
      hour :=heure;
      min :=minute;
      sec := sec;
    end;
    PackTime(DateT, DateF);// convertir en longInt
    Assign(f, nf);
    reset(f);
    SetFtime(f, DateF);
    if dosError <> 0 then journal('_val_clas, creer_date_f, dos n° '+nb_ch(Doserror, 2,0));
    close(f);
    end;
    Si quelqu' un avait une piste, ....
    En attendant je vous souhaite une trés bonne année 2005
    Lucien

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Plutôt étrange... Peux-tu mettre plus de code ?

    Quel OS utilises-tu également ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    Trés étrange en effet,

    Voici la procédure complète, à laquelle j'ai rajouté un test 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
     
     
    if communeAtraiter(p_c,d_c) then// création de la liste chaînée
    begin
       Assign(fs, Date_H_F); // function qui crée le nom du Fichier de ctl
       Rewrite(fs);//écrasement de l'ancien
       courant:=p_c;
       while courant <> nil then
       begin 
          if fichier_existe(courant^.nfcrs) then
          begin
             GetDate(an, mois, jour, j_s);//récupérer la date syst 
             GetTime(heure, minute, sec, sec100);// récupérer l'heure 
         // convertir en Date_Time 
            with DateT do 
            begin 
               year :=an;// tous word 
               month :=mois; 
               day := jour; 
               hour :=heure; 
               min :=minute; 
               sec := sec; 
            end; 
            PackTime(DateT, DateF);// convertir en longInt 
            Assign(f, courant^.nfcrs); 
           {$i-}reset(f); {$i+}
            if ioresult=0 then    SetFtime(f, DateF); 
            if dosError <> 0 then journal('_val_clas, creer_date_f, dos n° '+nb_ch   (Doserror, 2,0)); 
           close(f); 
           Dfic.nf := courant^.nfcrs;// mémorisation pour le F de ctl
           Dfic.df := DateF;
           write(fs, Dfic);
        end; 
      end; // while
      courant:=courant^.suiv;
      close(fs);
    end;
    end; // creer_date_f
    Voilà,
    Lucien

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Selon l'aide de TP, la seule DosError possible après un appel à setFTime est 6...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if dosError <> 0 then journal('_val_clas, creer_date_f, dos n° '+nb_ch   (Doserror, 2,0));
    Peux-tu être plus précis sur cette ligne ? Elle fait quoi exactement ? Es-tu sûr de la valeur de DosError ?

  5. #5
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Bonjour !

    Alors déjà, une petite liste sur les codes d'erreur Dos standard :
    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
     
     00h (0)   no error
     01h (1)   function number invalid
     02h (2)   file not found
     03h (3)   path not found
     04h (4)   too many open files (no handles available)
     05h (5)   access denied
     06h (6)   invalid handle
     07h (7)   memory control block destroyed
     08h (8)   insufficient memory
     09h (9)   memory block address invalid
     0Ah (10)  environment invalid (usually >32K in length)
     0Bh (11)  format invalid
     0Ch (12)  access code invalid
     0Dh (13)  data invalid
     0Eh (14)  reserved
     0Eh (14)  (PTS-DOS 6.51+, S/DOS 1.0+) fixup overflow
     0Fh (15)  invalid drive
     10h (16)  attempted to remove current directory
     11h (17)  not same device
     12h (18)  no more files
    De plus, la procédure SetFTime fait appel à la fonction 5701h de l'int 21h ne pouvant, selon le manuel, renvoyer que les codes d'erreur 1 (numéro de fonction invalide - pour Dos <2.0) ou 6 (handle invalide).

    Ton erreur 13 semble donc plus qu'étrange : elle est impossible à obtenir si on suit le manuel

    Il y a donc fort à parier que le problème se situe en amont. Vérifie bien que ton fichier est bien ouvert, et à la place de Reset(f), utilise plutôt :
    qui ouvre le fichier en lecture octet par octet.

    Par ailleurs, essaie aussi de passer en lecture seule (et non en lecture/écriture) avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      f: file;
    begin
      {$I-}
      Assign(f, 'FILE.DAT');
      FileMode := 0;
      Reset(f, 1);
      ...
      Close(f);
      {$I+}
      if (IOResult <> 0) then
        WriteLn('Erreur I/O');
    end;
    @++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    Bonjour Hdd34,


    Je te remercie, deux fois !
    La première pour cette réponse: j'ai lu comme toi que le code 13 ne pouvait pas apparaître; mais je suis sous win2k...est-ce que les temps ont changé :

    Le second remerciement pour les didacticiels que tu as rédigés à notre intention.
    Je viens de me régaler avec celui sur les pointeurs; cela m'ouvre des horizons....

    Grand Merci,
    Bonne année,
    Lucien

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if dosError <> 0 then journal('_val_clas, creer_date_f, dos n° '+nb_ch   (Doserror, 2,0));
    Pour répondre à l'un des rédacteurs, cette ligne appelle le fichier log dans lequel je relève les erreurs éventuelles: nom de l'unité, nom de la procédure ou de la fonction où s'est produit l'incident, le numéro de l'erreur.
    Je confirme bien le n° 13 de l'erreur Dos, bien qu'il soit totalement en contradiction avec la documentation de Borland...

    Le code fonctionne correctement aprés insertion du ioresult. Je n'essaie pas de l'enlever pour l'instant, il vaut mieux avancer mon travail. mais j'y reviendrai car je n'aime pas les approximations incompréhensibles, je les crainds

    Merci à vous deux
    et encore une fois bonne année!
    Lucien

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

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