Les Entrées / Sorties en VB.NET et C#

Par Fabien Lavocat Le 31. octobre 2007 à 09:35

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");

    Tags :

    Tutoriaux .NET

    Ajouter un commentaire


    (Affichera votre icône Gravatar)

      Country flag

    biuquote
    • Commentaire
    • Aperçu immédiat
    Loading



    Powered by BlogEngine.NET 1.5.0.7
    Theme by Mads Kristensen - Updated by Fabien Lavocat

    A propos de l'auteur

    Fabien Lavocat Lavocat Fabien
    Ingénieur Multimédia - TMM Communication

    "Blog-Microsoft.fr is an independent blog and is not affiliated with, nor has it been authorized, sponsored, or otherwise approved by Microsoft Corporation."

    Contactez-moi Send mail

    Calendar

    <<  mars 2010  >>
    lumamejevesadi
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    View posts in large calendar

    Publicité