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

Delphi Discussion :

Fichier et I/O error 123


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut Fichier et I/O error 123
    Bonjour à tous,

    Je cherche à copier le contenu d'un répertoire vers un autre.

    J'ai essayé plusieurs procédures CopyFiles différentes mais j'ai toujours un problème à l'ouverture du fichier From.

    En fait, je me demandais... une fois qu'on est dans le répertoire From, comment on fait pour indiquer qu'il faut y copier tous le contenu vers le répertoire To ?

    Voiçi une partie de mon code ... il faut mettre LZExpand dans les uses !

    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
     
    const
         dirGCS = 'C:\Sources Delphi perso\GCodes Sources\';
         dirBakGCS  =  'C:\Sources Delphi perso\Backup GCodes sources\';
     
    procedure TFormPrincipale.p_CopyFile(FromFileName, ToFileName: string);
    var
      FromFile, ToFile: File;
    begin
      AssignFile(FromFile, FromFileName); { Assigne FromFile à FromFileName }
      AssignFile(ToFile, ToFileName);     { Assigne ToFile à ToFileName }
      Reset(FromFile);                    { Ouvre le fichier source }
      try
        Rewrite(ToFile);                  { Crée le fichier cible }
        try
          { copie le fichier si un nombre négatif est retourné }
          { propage l'exception }
          if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) < 0
            then
            raise EInOutError.Create('Erreur en utilisant LZCopy')
        finally
          CloseFile(ToFile);  { Ferme ToFile }
        end;
      finally
        CloseFile(FromFile);  { Ferme FromFile }
      end;
    end;
     
    //------------------------------------------------------------------------------
     
    procedure TFormPrincipale.p_DateEtHeure;
    begin
         heure := FormatDateTime('hh mm',Time);
         jour := FormatDateTime('dd mm yy',Date);
    end;
     
    //------------------------------------------------------------------------------
    procedure TFormPrincipale.p_CreeRepertoire;
    begin
       try
          p_DateEtHeure;
     
          DirDestJour := dirBakGCS+jour;
     
          if not DirectoryExists(DirDestJour) then
             begin
                  ForceDirectories(DirDestJour+'\'+heure+'\');
                  MessageDlg('Le répertoire '+ DirDestJour+'\'+heure+
                  ' vient d''être créé', mtInformation, [mbOK], 0);
             end
          else
             if DirectoryExists(DirDestJour) then
                begin
                    CreateDir(DirDestJour+'\'+heure+'\');
                    MessageDlg('Le répertoire '+heure+' vient d''être créé',
                                   mtInformation, [mbOK], 0);
                end;
       except
             raise Exception.Create('Impossible de créer C:\temp');
       end;
       DirDestJourHeure := DirDestJour+'\'+heure+'\';
    end;
     
    //------------------------------------------------------------------------------
     
    procedure TFormPrincipale.BtnOkClick(Sender: TObject);
    begin
         p_CreeRepertoire;
         p_CopyFile(dirGCS, DirDestJourHeure);
     
    end;

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Il existe une fonction qui te permet de copier le fichier sans à avoir besoin de les ouvrir.

    CopyFile +
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    Effectivement, comme dit Malatar, Copyfile semble plus approprié.
    Un petit exemple pour copier tous les fichiers d'un répertoire FolderS vers FolderC :
    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
     
    procedure TForm2.CopyFolderFiles(FolderS, FolderC : string; FailsIfExists : Boolean);
    var
      SearchRec : TSearchRec;
      Status : Integer;
      aFolderS, aFolderC : String;
    begin
      // Positionne les '\' au cas où ...
      aFolderS := IncludeTrailingPathDelimiter(FolderS);
      aFolderC := IncludeTrailingPathDelimiter(FolderC);
      Status := FindFirst(aFolderS + '*.*',faAnyFile,SearchRec);
      while Status = 0 do
      begin
        if (SearchRec.Attr and faDirectory) = 0 then
          CopyFile(pchar(aFolderS + SearchRec.Name), pchar(aFolderC + SearchRec.Name),FailsIfExists);
        Status := Findnext(SearchRec);
      end;
    end;
    Cet exemple n'est pas complet car il manque le test sur l'existence des répertoires, la possibilité de copier les sous-répertoires etc. Mais c'est juste un exemple...
    Bon courage!
    Eb.

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Juste une petite remarque, sans doute hors sujet : si on utilise la copie suivie d'une suppression de fichier pour faire un déplacement dans le même disque, la commande rename fonctionne.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    Merci eBastien,

    Déjà, je peux copier les fichiers ... maintenant je vais analyser ce code pour essayer de comprendre pouquoi cela ne fonctionnait pas avec les autres procédures.

    Il me reste à trouver comment faire pour les répertoires... mais maintenant je devrais trouver

    Encore un grand merci à tous... quand j'aurai fini et débugé l'application, je mettrai les sources à dispo sur le site... pour infos.
    a+Eric

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

Discussions similaires

  1. Enregistrer un fichier dans un dossier - Error
    Par delilou dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 22/03/2011, 19h05
  2. Réponses: 4
    Dernier message: 26/07/2007, 10h21
  3. [LG]Runtime Error lors d'une recherche dans un fichier
    Par Fraynor dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2005, 22h51
  4. "error : fin de fichier inattendue" en C++
    Par mateo.14 dans le forum MFC
    Réponses: 9
    Dernier message: 28/01/2005, 09h30
  5. [LINUX][INSTALL]Error de fichier trop court
    Par silvermoon dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/08/2004, 16h17

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