Nous allons ouvrir un fichier texte et le remplir s'il n'existe pas encore.
Nous afficherons ensuite son contenu à l'écran.
On utiliser pour cela les classes System.IO.StreamReader pour la lecture et System.IO.StreamWriter pour l'écriture
using System;
using System.IO
procedure TWinForm.FichierTexte(nomFichier : String );
var sr : StreamReader ;
sw : StreamWriter ;
line : String ;
begin
sr := nil;
sw := nil;
trybeginifnot &File.Exists(nomFichier) thenbegin // Le fichier n'existe pas. On le crée.
sw := StreamWriter.Create(nomFichier);
sw.WriteLine('Bonjour. Nous sommes le {0} et il est {1} ',
DateTime.Now.ToLongDateString(),
DateTime.Now.ToLongTimeString());
sw.Close();
sw := nil;
// Remarque : On peut utiliser sw := File.AppendText(NomFichier) pour ajouter // du texte à un fichier existantend ;
// Ouverture du fichier et écriture du contenu du fichier sur la console
sr := StreamReader.Create( nomFichier );
Console.WriteLine('Début du fichier');
line := sr.ReadLine();
while line <> nildobegin
Console.WriteLine(line);
line := sr.ReadLine();
end ;
Console.WriteLine( 'Fin du fichier' );
end ;
finallybegin // Fermeture streamreaderif sr <> nilthen sr.Close();
// Fermeture streamwriterif sw <> nilthen sw.Close();
end ;
end ; // try .. finallyend ;
Nous allons ouvrir un fichier binaire et le remplir (d'entiers) s'il n'existe pas encore.
Nous afficherons son contenu à l'écran.
On utilise pour cela les classes System.IO.BinaryReader pour la lecture et System.IO.BinaryWriter pour l'écriture.
using System.IO;
using System;
procedure TWinForm.FichierBinaire(NomFichier : String ) ;
var i : Integer ;
br : BinaryReader ;
bw : BinaryWriter ;
fs : FileStream ;
begin
br := nil;
bw := nil;
fs := nil;
trybeginifnot &File.Exists(NomFichier) thenbegin // Le fichier n'existe pas. On le crée
bw := BinaryWriter.Create( &File.&Create(NomFichier) );
for i:=0 to 9 do
bw.Write(i);
bw.Close();
end ;
// Ouverture du contenu du fichier et écriture sur la console
fs := &File.Open(NomFichier, FileMode.Open);
br := BinaryReader.Create(fs);
while (fs.Position < fs.Length) do
Console.Write(br.ReadInt32());
Console.WriteLine( #13#10 + 'Fin du fichier');
end ;
finallybeginif br<>nilthen br.Close();
if bw<>nilthen bw.Close();
end ;
end ;
end ;
Windows envoie des notifications qui permettent de surveiller les modifications apportées au système de fichier.
Cela se fait de la manière suivante en utilisant la classe System.IO.FileSystemWatcher.
procedure TWinForm.Watch(path : String ; filter : String ) ;
var fw : FileSystemWatcher ;
begin // On peut utiliser les '*' avec filter // Création de l'objet watcher
fw := FileSystemWatcher.Create(path, filter);
// On ajoute les handlers pour surveiller les événements qu'on souhaite.
Include( fw.Changed , OnChanged );
Include( fw.Renamed , OnRenamed );
Include( fw.Created , OnChanged );
Include( fw.Deleted , OnChanged );
Include( fw.Error , OnError );
// On surveillera aussi les sous répertoires
fw.IncludeSubdirectories := true;
// Mettre EnableRaisingEvents à true démarre la surveillance des modifications. // Mettre à false l'arrête.
fw.EnableRaisingEvents := true;
end ;
procedure TWinForm.OnChanged( source : &Object ; e : FileSystemEventArgs) ;
begin
Console.WriteLine('Fichier {0} {1}', e.FullPath, e.ChangeType);
end ;
procedure TWinForm.OnRenamed( source : &Object ; e : RenamedEventArgs ) ;
begin
Console.WriteLine('Fichier {0} renommé en {1}', e.OldFullPath, e.FullPath);
end ;
procedure TWinForm.OnError(source : &Object ; e : ErrorEventArgs) ;
var ex : Exception ;
begin
ex := e.GetException();
Console.WriteLine( '-' + ex.ToString());
end ;
Et voici l'utilisation de la fonction Watch
// Pour surveiller l'activité du répertoire c:\rep
Watch( 'c:\rep', '*' );
On utilise la méthode GetAttributes de la classe System.IO.File
using System.IO;
procedure TWinForm.GetFileAttributes( sFilename : String ) ;
var flagAttr : FileAttributes ;
begin
flagAttr := &File.GetAttributes(sFilename);
// Date de création
Console.WriteLine('Créé le {0} à {1}',
&File.GetCreationTime(sFilename).ToShortDateString(),
&File.GetCreationTime(sFilename).ToShortTimeString());
// Date de la dernière modification
Console.WriteLine('Modifié le {0} à {1}',
&File.GetLastWriteTime(sFilename).ToShortDateString(),
&File.GetLastWriteTime(sFilename).ToShortTimeString());
// Date du dernier accès
Console.WriteLine('Dernier accès le {0} à {1}',
&File.GetLastAccessTime(sFilename).ToShortDateString(),
&File.GetLastAccessTime(sFilename).ToShortTimeString());
Console.WriteLine('Attributs de {0}', sFilename);
// Attribut Archiveif ((flagAttr and FileAttributes.Archive) = FileAttributes.Archive)
then Console.WriteLine(FileAttributes.Archive);
// Attribut Compresséif ((flagAttr and FileAttributes.Compressed) = FileAttributes.Compressed)
then Console.WriteLine(FileAttributes.Compressed);
// Attribut Deviceif ((flagAttr and FileAttributes.Device) = FileAttributes.Device)
then Console.WriteLine(FileAttributes.Device);
if ((flagAttr and FileAttributes.Directory) = FileAttributes.Directory)
then Console.WriteLine(FileAttributes.Directory);
if ((flagAttr and FileAttributes.Encrypted) = FileAttributes.Encrypted )
then Console.WriteLine(FileAttributes.Encrypted);
// Attribut cachéif ((flagAttr and FileAttributes.Hidden) = FileAttributes.Hidden)
then Console.WriteLine(FileAttributes.Hidden);
// Attribut Normalif ((flagAttr and FileAttributes.Normal) = FileAttributes.Normal)
then Console.WriteLine(FileAttributes.Normal);
// Attibut non indexéif ((flagAttr and FileAttributes.NotContentIndexed) = FileAttributes.NotContentIndexed)
then Console.WriteLine(FileAttributes.NotContentIndexed);
// Attribut Offlineif ((flagAttr and FileAttributes.Offline) = FileAttributes.Offline)
then Console.WriteLine(FileAttributes.Offline);
// Attribut ReadOnlyif ((flagAttr and FileAttributes.ReadOnly) = FileAttributes.ReadOnly)
then Console.WriteLine(FileAttributes.ReadOnly);
// Attribut ReparsePointif ((flagAttr and FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint)
then Console.WriteLine(FileAttributes.ReparsePoint);
// Attribut SparseFileif ((flagAttr and FileAttributes.SparseFile) = FileAttributes.SparseFile)
then Console.WriteLine(FileAttributes.SparseFile);
// Attribut Systemif ((flagAttr and FileAttributes.System) = FileAttributes.System)
then Console.WriteLine(FileAttributes.System);
// Attribut Temporaryif ((flagAttr and FileAttributes.Temporary) = FileAttributes.Temporary)
then Console.WriteLine(FileAttributes.Temporary);
end ;
On utilise la fonction GetFileSystemEntries de la classe System.IO.Directory
using System.IO;
using System;
procedure TWinForm.Dir( directory : String ) ;
var files : arrayofString ;
i , filecount : Integer ;
begin // pour avoir les noms des fichiers et sous-répertoires
files := System.IO.Directory.GetFileSystemEntries(directory) ;
filecount := Length( files ) ;
for i:=0 to filecount-1 do
Console.WriteLine(files[i]);
end ;
Pour avoir juste les noms des fichiers et pas les sous-répertoires d'un répertoire, on utilise System.IO.Directory.GetFiles()
Les fichiers sont ouverts avec l'encodage unicode par défaut dans .NET.
Il en résulte que les caractères accentués par exemple ne s'affichent pas correctement.
Vous devez spécifier le type d'encodage à utiliser, pour la lecture/écriture de votre fichier. Exemple pour la lecture
using System.IO;
using System.Text;
var strReader : StreamReader ;
strReader := System.IO.StreamReader.Create( filename , Encoding.Default );
Ici, on récupère l'encodage courant et on l'applique lors de l'ouverture du fichier par le StreamReader.
On peut faire exactement la même chose avec les StreamWriter