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 :

Assignation d'un fichier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Par défaut Assignation d'un fichier
    Bonjour,

    Je souhaiterai savoir si une variable de type file of byte est assigné ?
    Ci joint un code d'exemple classique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Procedure Open_File;
    var FD : file of byte;
    begin
      if OpenDialog1.Execute then
      begin
        AssignFile(FD, OpenDialog1.FileName);
        Rewrite(FD);
        CloseFile(FD);
      end;
    end;
    Ce que je souhaite dans mon programme, comme je ne sais pas si FD est déjà assigné, faire un test du type, "SI FD assigné" "Alors CloseFile(FD)".
    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Par défaut
    Dans le cas que tu nous présentes, FD a une portée locale à la procédure.
    Il est donc tout neuf à chaque entrée dans cette procédure, et relâché en sortie de procédure.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Par défaut
    Meci pour la réponse.
    FD est bien une variable globale.
    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
    FD : file of byte;
     
    Procedure TExemple.OpenFile (Filename : string);
    begin
        AssignFile(FD, OpenDialog1.FileName);
        Rewrite(FD);
    end;
     
    Procedure TExemple.CloseFile;
    begin
        CloseFile(FD);
    end;
    Quel test puis-je faire sur FD, avant de faire le "closeFile", ou "AssignFile" pour savoir si il est assigné ou non ?
    Merci.

  4. #4
    Membre chevronné
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Par défaut
    Hélas, comme tu le dis si bien, c'est une variable, et pas un objet.
    A mon avis, la seul possibilité est de tenter une action sur FD (un seek ?) encadrée par les directives {$i-} et {$i+} avec un test sur la fonction IOResult...
    Une alternative aux File of byte pourrait être les TFileStream ; là un flux est un objet et c'est facile de le tester par Assigned.
    Voici un extrait de l'aide de D7
    Il existe plusieurs approches que vous pouvez adopter pour la lecture et l'écriture de fichiers*:

    L'approche recommandée pour la manipulation de fichiers consiste à utiliser des flux de fichier. Les flux de fichier sont des instances de la classe TFileStream utilisées pour accéder aux informations de fichiers disque. Les flux de fichier sont portables et proposent une approche de haut niveau des opérations d'E/S de fichier. Comme les flux de fichier mettent à disposition le handle de fichier, cette approche peut être combinée avec la suivante. La rubrique Utilisation de flux de fichier décrit TFileStream.

    Vous pouvez travailler avec des fichiers en utilisant une approche basée sur un handle. Les handles de fichier sont fournis par le système d'exploitation lorsque vous créez ou ouvrez un fichier pour manipuler son contenu. L'unité SysUtils définit un certain nombre de routines de gestion de fichiers qui manipulent des fichiers en utilisant des handles. Sous Windows, il s'agit généralement d'enveloppes de fonctions de l'API Windows. Comme les fonctions BaseCLX peuvent utiliser la syntaxe du langage Delphi et fournissent occasionnellement les valeurs par défaut des paramètres, elles peuvent facilement servir d'interface à l'API Windows. De plus, il existe des versions correspondantes sous Linux, de sorte que vous pouvez utiliser ces routines dans des applications multi-plates-formes. Pour utiliser une approche basée sur un handle, ouvrez tout d'abord un fichier en utilisant la fonction FileOpen ou créez un nouveau fichier en utilisant la fonction FileCreate. Lorsque vous disposez du handle, utilisez les routines basées sur un handle pour manipuler son contenu (écrire une ligne, lire le texte, etc.).

    L'unité System définit un certain nombre de routines d'E/S de fichier qui manipulent des variables fichier, généralement de la forme "F: Text:" ou "F: File:" Les types de variables fichier sont au nombre de trois*: typé, texte et sans type. De nombreuses routines de gestion de fichier, comme AssignPrn ou writeln, les utilisent. L'utilisation de variables fichier est désapprouvée, et ces types de fichier ne sont pris en charge qu'à des fins de compatibilité ascendante. Ils sont incompatibles avec les handles de fichier Windows. Si vous avez besoin de travailler avec ces types de fichiers, voir Fichiers non typés et Types de fichiers.

  5. #5
    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,

    On peut faire avant l'assignfile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (*$I-*) filepos(FD) (*$I+*) ;
    if ioresult=0 then showmessage('Fichier ouvert') ;
    Mais je crérérais plutôt une variable FD_Name qui contiendrait le nom de fichier entre l'open et le close, sinon FD_Name='' (FD non assigné).

Discussions similaires

  1. Utilisation de 'Assign' dans la gestion de fichier
    Par lucky84 dans le forum Langage
    Réponses: 1
    Dernier message: 06/12/2008, 21h48
  2. Réponses: 4
    Dernier message: 15/01/2008, 16h24
  3. [TP] Problème d'assignation de fichier
    Par yang33 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 04/06/2007, 22h34
  4. Réponses: 13
    Dernier message: 30/05/2006, 17h00
  5. assigner/recuperer le contenu d'un fichier texte
    Par Lorenzo77 dans le forum Delphi
    Réponses: 6
    Dernier message: 22/05/2006, 11h54

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