Au programme:
Parcourir les informations de vos fichiers
Lecture/Ecriture dans un fichier
Monitorez vos dossiers et fichiers
La compression
Les Isolated Storages
Nous allons voir comment utiliser les Entrées / Sortie sous .NET que ce soit pour une simple lecture/écriture mais aussi pour la compression de données.
1. Navigation dans les fichiers
Le namespace System.IO met à disposition plusieurs classes permettant d’explorer notre hiérarchie de fichiers.
Classe FileInfo
Elle permet d’acceder aux informations d’un fichier ou de faire des actions simple comme la copie
' VB
Dim ourFile As FileInfo = New FileInfo(”c:\boot.ini”)
If ourFile.Exists Then
Console.WriteLine(”Filename: {0}”,ourFile.Name)
Console.WriteLine(”Path : {0}”,ourFile.FullName)
End If
// C#
FileInfo ourFile = new FileInfo(@”c:\boot.ini”);
if (ourFile.Exists)
{
Console.WriteLine(”Filename: {0}”,ourFile.Name);
Console.WriteLine(”Path : {0}”,ourFile.FullName);
}
' VB
Dim ourFile As FileInfo = NewFileInfo(”c:\boot.ini”)
ourFile.CopyTo(”c:\boot.bak”)
// C#
FileInfo ourFile = new FileInfo(@”c:\boot.ini”);
ourFile.CopyTo(@”c:\boot.bak”);
Classe DirectoryInfo
Elle permet d’acceder aux informations d’un répertoire.
' VB
Dim ourDir As DirectoryInfo = New DirectoryInfo(”c:\windows”)
Console.WriteLine(”Directory:{0}”,ourDir.FullName)
Dim file As FileInfo
ForEach file In ourDir.GetFiles()
Console.WriteLine(”File:{0}”, file.Name)
Next
// C#
DirectoryInfo ourDir = new DirectoryInfo(@”c:\windows”);
Console.WriteLine(”Directory:{0}”,ourDir.FullName);
foreach(FileInfo file in ourDir.GetFiles())
{
Console.WriteLine(”File:{0}”, file.Name);
}
Classe DriveInfo
Elle permet d’acceder aux informations d’un disque
' VB
Dim drives() As DriveInfo = DriveInfo.GetDrives()
Dimdrive As DriveInfo
ForEach driveIndrives
Console.WriteLine(”Drive:{0}”,drive.Name)
Console.WriteLine(”Type: {0}”,drive.DriveType)
Next
// C#
DriveInfo [] drives = DriveInfo.GetDrives();
foreach(DriveInfodrivein drives)
{
Console.WriteLine(”Drive:{0}”,drive.Name);
Console.WriteLine(”Type: {0}”,drive.DriveType);
}
Classe Path
Elle permet de manipuler le chemin d’un fichier (changer l'extension par exemple)
' VB
Dim ourPath As String= “c:\boot.ini”
Console.WriteLine(ourPath)
Console.WriteLine(”Ext: {0}”,Path.GetExtension(ourPath))
Console.WriteLine(”ChangePath:{0}”, Path.ChangeExtension(ourPath, “bak”))
// C#
string ourPath = @”c:\boot.ini”;
Console.WriteLine(ourPath);
Console.WriteLine(”Ext: {0}”,Path.GetExtension(ourPath));
Console.WriteLine(”ChangePath:{0}”, Path.ChangeExtension(ourPath, “bak”));
Classe FileSystemWatcher
Elle permer de créer un espion sur vos dossiers et fichiers
' VB
Dim watcher As FileSystemWatcher = New FileSystemWatcher() ‘Création du watcher
watcher.Path = "c:\" ' on surveille le disque C
' On précise l’evenement à surveiller et on lui attribut la fonction à appeler
AddHandlerwatcher.Renamed, NewRenameEventHandler(AddressOfwatcher_Renamed)
' On démarre la surveillance
watcher.EnableRaisingEvents = True
' Voici notre fonction appelée lors de l’évenement
Subwatcher_Renamed(ByValsenderAsObject,ByVal eAsRenamedEventArgs)
Console.WriteLine(”Renommé {0} en {1}”, e.OldFullPath, e.FullPath)
// C#
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @”c:\”;
// On précise la fonction à appeler lors de l’evenement Renamed
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
// On démarre la surveillance
watcher.EnableRaisingEvents = true;
// Voici notre fonction appelée lors de l’évenement
static void watcher_Renamed(object sender, RenamedEventArgse)
{
Console.WriteLine(”Renommé {0} en {1}”, e.OldFullPath, e.FullPath);
}
2. Lecture et écriture
Comment lire dans un fichier ?
' VB
Dim theFile As FileStream = File.Open(”C:\boot.ini”, FileMode.Open, FileAccess.Read)
Dim rdr As StreamReader = NewStreamReader(theFile)
Console.Write(rdr.ReadToEnd())
rdr.Close()
theFile.Close()
// C#
FileStream theFile = File.Open(@”C:\boot.ini”,FileMode.Open,FileAccess.Read);
StreamReader rdr = new StreamReader(theFile);
Console.Write(rdr.ReadToEnd());
rdr.Close();
theFile.Close();
Comment écrire dans un fichier ?
' VB
FileStream theFile = File.Create(”c:\somefile.txt”)
Dim writer As StreamWriter = NewStreamWriter(theFile)
writer.WriteLine(”Hello”)
writer.Close()
theFile.Close()
// C#
FileStream theFile = File.Create(@"c:\somefile.txt");
StreamWriter writer = newStreamWriter(theFile);
writer.WriteLine("Hello");
writer.Close();
theFile.Close();
Remarque: au lieu de File.Create() on aurait pu écrire File.Open(@"c:\somefile.txt", FileMode.OpenOrCreate, FileAccess.Write);
Comment écrire et lire dans la mémoire ?
' VB
Dim memStrm As New MemoryStream()
Dim writer As NewStreamWriter(memStrm)
writer.WriteLine(”Bonjour”)
writer.WriteLine(”Aurevoir”)
// C#
MemoryStream memStrm = new MemoryStream();
StreamWriter writer = newStreamWriter(memStrm);
writer.WriteLine("Bonjour");
writer.WriteLine("Aurevoir");
3. Compression
Comment compresser un fichier ?
Il existe deux méthodes de compression dans le Framework 2.0: GZIP et DEFLATE. Ces deux méthodes utilisent le même algorithme de compression cependant GZIP ajoute des “entête” à votre fichier permettant à d’autres applications que la votre d’ouvrir le fichier compressé. Donc si vous devez créé un fichier compressé pouvant être utilisé par une autre application préférez utiliser GZIP sinon DEFLATE.
' VB
Dim sourceFile As FileStream = File.OpenRead(inFilename)
Dim destFile As FileStream = File.Create(outFilename)
' On aurai pu utiliser de la même façon DeflateStream
Dim compStream As New GZipStream(destFile, CompressionMode.Compress)
Dim theByte As Integer = sourceFile.ReadByte()
While theByte <> -1
' Pareil pour la décompression mais dans le sens inverse avec readbyte
compStream.WriteByte(CType(theByte,Byte))
theByte=sourceFile.ReadByte()
End While
// C#
FileStream sourceFile = File.OpenRead(inFilename);
FileStream destFile = File.Create(outFilename);
// On aurai pu utiliser de la même façon DeflateStream
GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);
int theByte = sourceFile.ReadByte();
while (theByte!=-1)
{
// Pareil pour la décompression mais dans le sens inverse avec readbyte
compStream.WriteByte((byte)theByte);
theByte = sourceFile.ReadByte();
}
4. Utiliser un “espace isolé”
Pourquoi utiliser un Isolated Storage ? Il est courant d’avoir une application qui a besoin d’enregistrer des données sur le disque cependant imaginez que l’utilisateur de votre logiciel n’ai pas de droit en écriture dans le dossier cible ? Fini le casse tête, l’utilisation d’un espace isolé vous permettras d’écrire/lire des fichiers dans cet espace sans vous préoccupez des droits en lecture/écriture.
Première étape: Création d’un Store
La création d’un store doit se faire soit par la méthode GetMachineStoreForAssembly qui vous permettra de sauvegarder des données propre à l’assembly et à la machine locale. Vous pouvez aussi utiliser la méthode GetUserStoreForAssembly pour stoquer des informations propre à l’utilisateur.
' VB
Dim machineStorage as IsolatedStorageFile = IsolatedStorageFile.GetMachineStoreForAssembly()
// C#
IsolatedStorageFile machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly();
Deuxième étape: la lecture et l’écriture dans notre espace isolé
' VB
Dim userStore as IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
Dim userStream As IsolatedStorageFileStream
userStream = New IsolatedStorageFileStream(”UserSettings.set”, FileMode.Create, userStore)
Dim userWriter As StreamWriter = New StreamWriter(userStream)
userWriter.WriteLine(”Plop”)
userWriter.Close()
// C#
IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly();
IsolatedStorageFileStream userStream;
userStream = new IsolatedStorageFileStream(”UserSettings.set”, FileMode.Create, userStore);
StreamWriter userWriter = newStreamWriter(userStream);
userWriter.WriteLine(”Plop”);
userWriter.Close();
Vous pouvez aussi utiliser des dossiers grâce à userStore.CreateDirectory("SomeDir");