u_c_basic_file - John COLIBRI. | - mots clé: nom de fichier - utilitaire
- logiciel utilisé: Windows 98, Delphi 5.0
- matériel utilisé: Pentium 500Mhz, 128 M de mémoire
- champ d'application: Delphi 1 à 6 sur Windows, Kylix
- niveau: débutant en Pascal et Delphi
- uses: u_c_basic_object, u_c_file_name, u_loaded,
u_c_display, u_dir, (u_c_log, u_strings,
u_types_constants)
- plan:
1 - Introduction
La classe c_basic_file encapsule la gestion de fichiers binaire sans type (un FILE). Il s'agit là essentiellement d'un redécoupage des primitive Pascal. Cette classe permet: - de forcer la création d'un fichier
- de tester s'il est ouvert ou non
- de sauvegarder une version précédente du fichier
Historiquement elle a été utilisée pour la gestion des fichiers .ED puis a été scindée en une classe autonaume.
2 - Utilisation 2.1 Compilation L'interface est la suivante:
type c_basic_file= class(c_basic_object)
private
m_file: File;
public
m_c_file_name: c_file_name;
m_io_result: Integer;
m_display_open: Boolean;
m_is_open: Boolean;
m_size: Integer;
m_write_begin, m_write_end: Integer;
constructor create_basic_file(p_name, p_complete_name: string); Virtual;
function f_check_and_display_io_result: Boolean;
function f_erase: Boolean;
function f_create: Boolean;
function f_force_create: Boolean;
function f_rename_previous_and_create: Boolean;
function f_rename_previous_and_create_with_extension(p_extension: String): Boolean;
function f_open: Boolean; Virtual;
function f_open_or_create: Boolean;
function f_append: Boolean;
function f_exists: boolean;
procedure rename_file(p_new_name: String);
procedure force_rename_file(p_new_name: String);
procedure change_file_extension(p_extension: String);
procedure change_complete_name(p_complete_name: String);
function f_change_file_extension(p_extension: String): Boolean;
function f_test_or_create_u_path: String;
procedure seek_file(p_position: Integer);
function f_file_position: Integer;
function f_file_size: Integer;
function f_eof: Boolean;
function f_block_write(p_pt: Pointer; p_length: Integer): Boolean;
function f_block_read(p_pt: Pointer; p_length: Integer): Boolean;
procedure flush_file;
procedure copy_file(p_copy_name: String);
procedure truncate_file;
procedure close_file; Virtual;
Destructor Destroy; Override;
end; | En ce qui concerne les données:
- m_file: le fichier
- m_c_file_name: la classe qui contient le nom du fichier
- m_io_result: le code d'erreur DOS
- m_is_open: le booléen qui permet de savoir si le fichier a été ouvert (et
évite d'appeler deux Reset ou deux Close de suite, par exemple)
- m_display_open: affiche si le fichier est ouvert (pour la mise au point)
- m_size: la taille
- m_write_begin, m_write_end: les indices où ont été écrits les octets par BlockWrite
Et pour les procédures et fonctions: - create_basic_file: crée en fournissant l'identifiant et le nom complet
- f_check_and_display_io_result: teste les erreurs d'entrée / sortie
- f_erase: efface le fichier
- f_create: crée le fichier
- f_force_create: crée le fichier en effaçant le précédent
- f_rename_previous_and_create: renomme le précédent et crée
- f_rename_previous_and_create_with_extension: renomme le précédent avec l'extension fournie et crée
- f_open: ouvre le fichier
- f_open_or_create: ouvre le fichier s'il existe, sinon le crée
- f_append: se positionne à la fin d'un fichier déjà ouvert
- f_exists: teste l'existence
- rename_file: renomme le fichier, sauf s'il en existe déjà un ayant ce nom
- force_rename_file: efface un fichier ayant ce nom et renomme
- change_file_extension: change d'extension vide en .~ED, ou l'extension .EXT
en .~EXT
- change_complete_name: change le nom complet
- f_change_file_extension: change l'extension uniquement
- f_test_or_create_u_path: crée un sous-répertoire 'u' (comme Utility).
Utilisé par les utilitaires tels que le Pretty Printer qui crée des copies des fichiers traités dans ce répertoire, plutôt que d'écraser ou renommer les fichiers originaux (il est arrivé au Pretty Printer de se planter).
- les primitives suivantes rendent PUBLIC des primitives non accessibles car m_file est PRIVATE:
- seek_file
- f_file_position
- f_file_size
- f_eof
- f_block_write
- f_block_read
- flush_file
- copy_file: copie le fichier
- truncate_file
- close_file
2.2 - Répertoires
L'unité est prévue pour être placée dans: C: programs colibri_helpers units
Vous pouvez naturellement changer cette organisation par Projet | Options | Directories Les directives de compilation sont: - R+ (vérification des intervalles)
- S+ (vérification de la pile)
- pas d'optimisation
3 - Programmation Cette unité utilise les primitives de gestion de fichier standard. 4 - Améliorations Citons:
- une gestion plus rigoureuse de f_block_read, f_block_write et le position dans le fichier
5 - Télécharger le source Vous pouvez télécharger: Avec les mentions d'usage: - j'apprécie tous les commentaires, remarques ou critiques
- signalez-moi les bugs que vous trouverez.
L'auteur
John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le
conseil (composants, architecture, test) et la
formation. Son site contient des articles
avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et
UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client. |