Error E/S 32 sur ecriture et suppresion

[Résolu]
Signaler
Messages postés
6
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
27 avril 2011
-
 Utilisateur anonyme -
slt tt le monde

j'Ai besoin d'une solution pour mon projet en cour SVP

Mon projet gère des comptes utilisAteurs
Et qu'An j'enregistre des comptes çA fonctionne, mAis je ne peux pAs en créer plusieurs A lA suite
Qu'An j'essAye de le fAire il me donne 'error E/S 32' pourtAnt je ferme mon fichier Après Avoir écrit A l'intérieur
Et si j'essAye d'effAcer un compte créé, vu ke j'intervient dAns le même fichier que pour en crer un , il me dit que le fichier est dejA utilisé pAr un Autre processus

Est ce que quelqu'un AurAi une solution SVP ! ! !

Je vous lAisse e code en question pour vous Aidez ! Merci d'AvAnce


<hr />

procedure TForm4.Button1Click(Sender: TObject);begin
    bool:= False;

    If Eid.Text = '' Then
    Begin
            Eid.Color := ClRed;
            bool := true;
    End
    Else
    Begin
      Eid.Color := clwhite;
    End;
    If EId.Text = 'nom utilisateur' Then
    Begin
         EId.Color := clRed;
           bool := true;
    End;
    If EMDP.Text  = '' Then
    Begin
           EMDP.Color := clRed;
           bool := true;
    End
    Else
    Begin
      EMDP.Color  := clwhite
    End;
    If EMDP.Text = 'mot de passe' Then
    Begin
         EMDP.Color := clRed;
           bool := true;
    End;
    If ENom.Text  = ''  Then
    Begin
           ENom.Color := clRed;
           bool := true;
    End
    Else
    Begin
      ENom.Color := clwhite
    End;
    If Enom.Text = 'identifiant' Then
    Begin
         ENom.Color := clRed;
           bool := true;
    End;
    If bool = False Then
    Begin
    if FileExists(ExtractFilePath(Application.ExeName)+'compte.txt') then //evite une erreur I/O si le fichier n'existe pas
    begin

        AssignFile(Fichier,ExtractFilePath(Application.ExeName)+'compte.txt');
        append (fichier);
        nom:= ('identifiant : '+ EID.Text) ;
        writeln (fichier ,nom);
        nom := ('nom utilisateur :' + ENom.Text) ;
        Writeln (fichier, nom );
        nom := ('Mot de passe :' + EMDP.Text) ;
        Writeln (fichier, nom );
        closefile(fichier);
        showmessage('compte enregistré');
    end
    Else
    Begin
      showmessage('pas de fichier ');
    End;

    End;
    If bool = True Then
    Begin

          showmessage('Vous avez oublié de complêter certains champs')  ;
    End;

end;

9 réponses

Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Bj
  Il semble que tu aies plusieurs problèmes!
  Le code que tu nous donnes ne nous éclaire pas beaucoup sur ton problème!
  Tu sembles utiliser un type textfile pour ton fichier!
  remarques méthode : 
    1. Pourquoi ta variable nom reçoit-elle des données variées (et peut être avariées)?    
    2. Le type record aurait été mieux me semble t-il :
        Type RPersonne = record 
                     identifiant : string ou autre...
                     nom          : string[20] ou autre...
                     nom utilisateur : string[20] ou autre...
                     MotPasse : etc...
                End;
        Ensuite tu déclares un fichier direct de type Fichier : File of  RPersonne
    3.Mettre Flush(fichier) avant le closefile si tu restes en textfile;
    4. Pb écriture de plusieurs fiches
      Où est ta boucle? Comment contrôle-tu la saisie et sa fin?
Etc... Consulte la gestion de fichier dans l'aide ou des exemples sur ce site, tu devrais résoudre ton problème facilement!
Jean_Jean
Messages postés
6
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
27 avril 2011

Merci poour tes infos JeAn_JeAn .

lA vAriAble nom fonctionne bien cAr j'Arrive A écrir dAns le fichier une fois A chAque fois que je lAnce l'Appliction

Merci pour l'idée du type Record mAis jpense rester en Textfile pour le moment .

MAis juste pour info pkoi tu trouve que le Type Record est mieux que leTextFile ?
C petêtre une Question bête mAis pour un débutAnt comme moi c pAs évident de voir lA différence.
 
Et encor merci !!!
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Pour bien débuter, il faut apprendre avec un manuel. Cherche des tutaux ou imprime l'aide delphi sur les fichiers! Perso, je continue de relire l'aide delphi que j'ai mis dans de gros classeurs, ça fait du bien, on oublie lorsque l'on ne pratique pas tous les jours et ça permet de se recaller correctement d'un point de vue des méthodes...

1. Si tu créé un type RPerconne, tu peux ensuite créer une variable
Var Identite : RPersonne;
Cela permet de manipuler toutes les varaibles de champ de données en une seule fois!

2. Tu écris une seule instruction pour écrire dans le fichier : Exemple
procedure Ecrire(Fichier : string; Identite : RPersonne);
  Var Fic   : File of  RPersonne;
Begin
  try
   {lecture du fichier}
    AssignFile(Fic,Fichier);
    Reset(Fic);
    write(Fic,Identite);
  finally
    CloseFile(Fic);
  end;
end;

Bien sûr avant, tu écris uneprocédure qui affecte les valeurs à identité :
identite.identifiant := 'Valeur';
identite.nom           :='autre valeur chaiine' Etc...
Bon code!
Jean_Jean
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
Bonjour,

Try
------
if FileExists(ExtractFilePath(Application.ExeName)+'compte.txt') THEN
      append(Fichier)
    ELSE
     rewrite(Fichier);
------
------

finally
closefile(fichier);
end;

cantador
Messages postés
6
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
27 avril 2011

Merci bcp pour tes explicAtion

çA fAit plAisir d'être Aidé

Et en plus mon ApplicAtion fonctionne  mAintenAnt !!

 A l prochAine JeAn_JeAn
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Salut Cantador,

    effectivement, tu peux créer le fichier s'il n'existe pas et éviter une erreur!

Jean_Jean
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
Salut Jean_Jean,

Oui et de plus je pense qu'on peut quand même faire le boulot avec un simple TextFile mais cela dit, je pense comme toi que le type record est mieux à conseiller ne serait ce que pour la suite éventuelle.

Cordialement

cantador
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
@ cantador,

   Cependant le textfile présente quelques inconvénients :
    - 1 ligne d'enregistrement par identifaction
    - Ou alors, il faut concaténer l'info en une seule ligne, c'est faisable pour des petites structures
      mais la longueur des champs doit être fixe pour un décodage correct ou la recherche de séparateur de champs; bref du traitement derrière...
   - Cela dit pour des petites structures, c'est facile, ça m'arrive de l'utiliser encore dans ce cas.
A+
Jean_Jean

Je suis d'accord avec JeanJean : le type record est mieux

Sinon petite proposition :

procedure TForm4.Button1Click(Sender: TObject);
Var
  i : Integer;
begin
  //Pour tout les composants faire
  For i:=0 To ComponentCount-1 do
  //Si c'est un TEdit et que la propriété text est vide alors
  If (Components[i] is TEdit) And ((Components[i] As TEdit).Text='') Then
    Begin
      //Bool est vrai
      Bool:=True;
      //La couleur du TEdit est rouge
      (Components[i] As TEdit).Color:=ClRed;
    End
  //Sinon elle est blanche
  Else (Components[i] As TEdit).Color:=ClWhite;
end;