Gestion des E/S sur Fichier
Par
Neguib
Nouveautés apportées par le Framework 2.0 notamment sur l'espace de noms System.IO :
Version VB.Net
![Niveau Débutant Avancé](./images/niveau-debutant-avance.gif) UsageGeneral
|
![Niveau Avancé Confirmé](./images/niveau-avance-confirme.gif) Securite
|
I. Prérequis:
II. Présentation:
III. Usage Général :
III-A. Particularités Visual Basic :
III-A-1. Class FileSystem
III-A-1-01. Propriété FileSystem.CurrentDirectory
III-A-1-02. Propriété FileSystem.Drives
III-A-1-03. Fonction FileSystem.CombinePath
III-A-1-04. Procedure FileSystem.CopyDirectory
III-A-1-05. Procedure FileSystem.CopyFile
III-A-1-06. Procedure FileSystem.CreateDirectory
III-A-1-07. Procedure FileSystem.DeleteDirectory
III-A-1-08. Procedure FileSystem.DeleteFile
III-A-1-09. Fonction FileSystem.DirectoryExists
III-A-1-10. Fonction FileSystem.FileExists
III-A-1-11. Fonction FileSystem.FindInFiles
III-A-1-12. Fonction FileSystem.GetDirectories
III-A-1-13. Fonction FileSystem.GetDirectoryInfo
III-A-1-14. Fonction FileSystem.GetDriveInfo
III-A-1-15. Fonction FileSystem.GetFileInfo
III-A-1-16. Fonction FileSystem.GetFiles
III-A-1-17. Fonction FileSystem.GetName
III-A-1-18. Fonction FileSystem.GetParentPath
III-A-1-19. Fonction FileSystem.GetTempFileName
III-A-1-20. Procedure FileSystem.MoveDirectory
III-A-1-21. Procedure FileSystem.MoveFile
III-A-1-22. Fonction FileSystem.OpenTextFieldParser
III-A-1-23. Fonction FileSystem.OpenTextFileReader
III-A-1-24. Fonction FileSystem.OpenTextFileWriter
III-A-1-25. Fonction FileSystem.ReadAllBytes
III-A-1-26. Fonction FileSystem.ReadAllText
III-A-1-27. Procedure FileSystem.RenameDirectory
III-A-1-28. Procedure FileSystem.RenameFile
III-A-1-29. Procedure FileSystem.WriteAllBytes
III-A-1-30. Procedure FileSystem.WriteAllText
Exemple Console. FileSystemFullSample
III-A-2. Class MalformedLineException
III-A-3. Class SpecialDirectories
III-A-4. Class TextFieldParser
III-A-5. Enum DeleteDirectoryOption
III-A-6. Enum FieldType
III-A-7. Enum RecycleOption
III-A-8. Enum SearchOption
III-A-9. Enum UICancelOption
III-A-9. Enum UIOption
III-B. Nouvelles Classes :
III-B-1. DriveInfo
III-B-2. DeflateStream
III-B-3. GzipStream
III-B-4. SerialPort
III-C. Modifications :
III-C-1. Enumération FileOptions
III-C-2. Mode Asynchrone
IV. Sécurité :
IV-A. Gestion par programmation des Access Control Lists
V. Liens Complémentaires:
I. Prérequis:
Pour votre commodité, il est preferable, avant d'aborder ce document, que vous soyez familier de la version 1.0
ou 1.1 de l'espace de noms System.IO.
Pour tester les codes-exemples décrits ici, vous devez avoir installé le Framework 2.0
ainsi qu'un logiciel de developpement tel que Microsoft Visual Basic 2005.
Tous les codes présentés sont implémentés à l'origine dans le cadre d'une application Console.
II. Présentation:
Ce document tente de décrire l'ensemble des nouveautés qu'apporte le Framework 2.0
sur la gestion des Entrées/Sorties sur fichier, de la façon la plus exhaustive possible.
Chaque paragraphe est illustré par un exemple simple de code en VB.Net.
![info](http://www.developpez.be/images/kitinfo.gif) |
Afin d'améliorer votre confort de navigation dans ce long document, vous disposez de 2 types de renvois:
* Celui qui se signale par la coloration du mot clé comme ceci : Lien
* Celui qui se signale par une image accompagnée d'une infobulle comme ceci : ![retour ...](./images/top.gif)
|
Pour une consultation plus complète de la version 2.0 concernant System.IO,
reportez-vous à la documentation MSDN liée à cet article.
III. Usage Général :
![niveau-debutant-avance](./images/niveau-debutant-avance.gif) Niveau
Ce chapitre se décline de façon nuancée selon le langage utilisé. Son contenu concerne les usages d'implémentations du
système de fichiers. Ici en VB.Net, il détaille dans un premier temps ce que propose le Framework 2.0 spécifiquement
à ce langage, pour ensuite décrire les apports communs à tous les langages utilisables.
- Particularités Visual Basic
- Nouvelles Classes
- Modifications
III-A. Particularités Visual Basic :
Les utilisateurs de Visual Basic ont toujours accès à FileSystem Object.
Il est maintenant directement accessible par la classe My.Computer.FileSystem.
Cet objet est implementable par le biais du nouvel espace de noms Microsoft.VisualBasic.FileIO.
Voici la liste des types utilisables dans cet espace de noms :
III-A-1. Class FileSystem
Classe qui fournit propriétés et méthodes pour gérer lecteurs, répertoires et fichiers.
Ce sous-chapitre vous détaille, tous les membres Shared et omet les méthodes d'instance héritées de System.Object.
![info](http://www.developpez.be/images/kitinfo.gif) |
La description est constituée de :
* La signature du membre
* La definition du membre
* Les surcharges éventuelles du membre
* Les remarques eventuelles
* Un petit code exemplaire qui met systématiquement en évidence la gestion des exceptions spécifiques à ce membre
|
|
|
|
|
III-A-1-01. Propriété FileSystem.CurrentDirectory
Shared Property CurrentDirectory As String |
Obtient ou définit le repertoire courant
![warning](http://www.developpez.be/images/kitwarning.gif) |
CurrentDirectory est une variable d'environnement système
|
CurrentDirectorySample | Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.IO
Private Shared Sub CurrentDirectorySample()
Dim currentDir As String
Dim testDir As String = "C:\DirForTest"
Console.WriteLine("Le répertoire courant est : ")
Try
currentDir = My.Computer.FileSystem.CurrentDirectory
Console.WriteLine(currentDir)
If Not (currentDir = testDir) Then
Console.WriteLine("Le répertoire courant est différent du repertoire test '" + testDir + "'")
My.Computer.FileSystem.CurrentDirectory = testDir
Console.WriteLine("la modification du répertoire courant a réussi.")
Else : Console.WriteLine("Le répertoire courant est identique au repertoire test, " + _
"aucune modification de répertoire courant effectuée.")
End If
Catch ex As DirectoryNotFoundException
Console.WriteLine("CurrentDirectory a échoué car le répertoire '" + testDir + "' n'a pas été trouvé.")
Catch ex As UnauthorizedAccessException
Console.WriteLine("CurrentDirectory a échoué car l'utilisateur n'a pas les droits nécessaires.")
Catch ex As Exception
Console.WriteLine("CurrentDirectory a échoué car :")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-02. Propriété FileSystem.Drives
Shared ReadOnly Property Drives As ReadOnlyCollection(Of DriveInfo) |
Obtient la collection DriveInfo des lecteurs disponibles
![warning](http://www.developpez.be/images/kitwarning.gif) |
Cette propriété renvoie toutes les commandes logiques et ne lève par elle-même aucune exception.
Attention donc à celles levées par la manipulation de DriveInfo
|
DrivesSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.Collections.ObjectModel
Imports System.IO
Private Shared Sub DrivesSamples()
Dim indent As Integer = 3
Dim drivesInfos As ReadOnlyCollection(Of DriveInfo)
drivesInfos = My.Computer.FileSystem.Drives
Console.WriteLine("Vous disposez des " + drivesInfos.Count.ToString() + " lecteur(s) suivant(s) :")
For Each driveI As DriveInfo In drivesInfos
Console.WriteLine(Space(indent) + driveI.Name)
Console.WriteLine(Space(indent + 1) + "Type : " + driveI.DriveType.ToString())
Console.WriteLine(Space(indent + 1) + "IsReady : " + driveI.IsReady.ToString())
If driveI.IsReady Then
Console.WriteLine(Space(2 * indent) + "VolumeLabel : " + driveI.VolumeLabel)
Console.WriteLine(Space(2 * indent) + "DriveFormat : " + driveI.DriveFormat)
Console.WriteLine(Space(2 * indent) + "TotalSize : " + driveI.TotalSize.ToString() + " Octets")
Console.WriteLine(Space(2 * indent) + "TotalFreeSpace : " + driveI.TotalFreeSpace.ToString() +" Octets")
End If
Next
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-03. Fonction FileSystem.CombinePath
Shared Function CombinePath(basePath As String, relativePath As String) As String |
Compose et retourne un chemin correctement formé à l'aide de 2 chemins partiels
![warning](http://www.developpez.be/images/kitwarning.gif) |
Cette méthode ôte les caractères slash-mark en excès pour créer un chemin correctement composé.
Un ArgumentException sera levée si les chaines de caractères spécifiées entrainent la création d'un chemin malformé
|
CombinePathSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Private Shared Sub CombinePathSample()
Dim basePath As String = String.Empty
Dim relativePath As String = "imageTest.gif"
Console.WriteLine("BasePath :")
Try
basePath = My.Computer.FileSystem.SpecialDirectories.MyPictures
Console.WriteLine(Space(3) + basePath)
Console.WriteLine("RelativePath :")
Console.WriteLine(Space(3) + relativePath)
Console.WriteLine("La Combinaison :")
Console.WriteLine(My.Computer.FileSystem.CombinePath(basePath, relativePath))
Catch ex As ArgumentException
Console.WriteLine("CombinePath a échoué car '" + basePath + "' + '" + relativePath + _
"' entraine la contruction d'un chemin malformé.")
Console.WriteLine(ex.ToString())
Catch ex As Exception
Console.WriteLine("CombinePath a échoué car :")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
III-A-1-04. Procedure FileSystem.CopyDirectory
Shared Sub CopyDirectory(...) |
Copie le répertoire spécifié vers un autre repertoire. Il existe 4 surcharges differentes à cette procedure :
Shared Sub CopyDirectory(fromDirPath As String, toDirPath As String)
Shared Sub CopyDirectory(fromDirPath As String, toDirPath As String, overwrite As Boolean)
Shared Sub CopyDirectory(fromDirPath As String, toDirPath As String, opt As UIOption)
Shared Sub CopyDirectory(fromDirPath As String, toDirPath As String, opt As UIOption, onCancel As UICancelOption) |
![warning](http://www.developpez.be/images/kitwarning.gif) |
Cette méthode copie le contenu du répertoire aussi bien que le répertoire lui-même.
Si le répertoire cible n'existe pas, il est créé.
Si le répertoire cible existe, les contenus des deux répertoires sont fusionnées à la condition que
le paramètre overwrite ait la valeur True
(la valeur par défaut est False).
Vous pouvez indiquer un nouveau nom pour le répertoire à copier.
Les paramètres UIOption et UICancelOption permettent
de proposer à l'utilisateur les boîtes de dialogues necessaires pour suivre et gérer la progression de l'opération.
Attention, ces derniers paramètres ne sont pas supportés par une application n'ayant pas
d'interface utilisateur, telle qu'un Service Windows.
|
CopyDirectorySample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.IO
Imports System.Security
Private Shared Sub CopyDirectorySample()
Dim fromDirPath As String = "C:\DirForTest"
Dim toDirPath As String = "C:\Copy\DirForTest"
Console.WriteLine("Le répertoire source : '" + fromDirPath + "'sera copié au chemin suivant : '" + toDirPath + "'.")
Console.WriteLine("CopyDirectory en cours...")
Try
My.Computer.FileSystem.CopyDirectory(fromDirPath, toDirPath)
Console.WriteLine("CopyDirectory terminé avec succès.")
Catch ex As DirectoryNotFoundException
Console.WriteLine("CopyDirectory a échoué car le répertoire '" + fromDirPath + "' n'a pas été trouvé.")
Catch ex As PathTooLongException
Console.WriteLine("CopyDirectory a échoué car la longueur du chemin spécifié(" + toDirPath.Length.ToString() + _
") excède le maximum authorisé(248).")
Catch ex As IOException
Console.WriteLine("CopyDirectory a échoué car :")
If My.Computer.FileSystem.GetDriveInfo(fromDirPath).Name = fromDirPath Then
Console.WriteLine("le repertoire source : '" + fromDirPath + "' désigne un répertoire racine.")
ElseIf fromDirPath = toDirPath Then
Console.WriteLine("le repertoire source '" + fromDirPath + "' et le repertoire destinataire :'" + toDirPath + _
"' sont identiques")
ElseIf My.Computer.FileSystem.DirectoryExists(toDirPath) Then
Console.WriteLine(toDirPath + " existe déjà. Le paramètre 'overwrite' de CopyDirectory est à False")
Else : Console.WriteLine(ex.ToString())
End If
Catch ex As SecurityException
Console.WriteLine("CopyDirectory a échoué car l'utilisateur n'a pas les droits nécessaires sur : '" + _
fromDirPath + "' .")
Catch ex As UnauthorizedAccessException
Console.WriteLine("CopyDirectory a échoué car l'utilisateur n'a pas les droits d'accès nécessaires.")
Catch ex As Exception
Console.WriteLine("CopyDirectory a échoué car :")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-05. Procedure FileSystem.CopyFile
Copie le fichier spécifié vers le chemin spécifié. Il existe 4 surcharges differentes à cette procedure :
Shared Sub CopyFile(fromFullPath As String, toFilePath As String)
Shared Sub CopyFile(fromFullPath As String, toFilePath As String, overwrite As Boolean)
Shared Sub CopyFile(fromFullPath As String, toFilePath As String, opt As UIOption)
Shared Sub CopyFile(fromFullPath As String, toFilePath As String, opt As UIOption, onCancel As UICancelOption) |
![warning](http://www.developpez.be/images/kitwarning.gif) |
Attention la méthode CopyFile ne préserve pas les propriétés de contrôle d'accès (ACEs).
Le fichier créé hérite par défaut des propriétés du répertoire dans lequel il est créé.
Le paramètre overwrite a par défaut la valeur False.
Vous pouvez indiquer un nouveau nom pour le fichier à copier.
Les paramètres UIOption et UICancelOption permettent
de proposer à l'utilisateur les boîtes de dialogues necessaires pour suivre et gérer la progression de l'opération.
Attention, ces derniers paramètres ne sont pas supportés par une application n'ayant pas
d'interface utilisateur, telle qu'un Service Windows.
|
CopyFileSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.IO
Imports System.Security
Private Shared Sub CopyFileSample()
Dim fromFullPath As String = "C:\DirForTest\test1.txt"
Dim toFilePath As String = "C:\Copy\DirForTest\newTest1.txt"
Console.WriteLine("Le fichier : '" + fromFullPath + "'sera copié dans le repertoire suivant : '" + toFilePath + "'.")
Console.WriteLine("CopyFile en cours...")
Try
My.Computer.FileSystem.CopyFile(fromFullPath, toFilePath)
Console.WriteLine("CopyFile terminé avec succès.")
Catch ex As FileNotFoundException
Console.WriteLine("CopyFile a échoué car le fichier '" + fromFullPath + "' n'a pas été trouvé.")
Catch ex As PathTooLongException
Console.WriteLine("CopyFile a échoué car la longueur du chemin spécifié(" + toFilePath.Length.ToString() + _
") excède le maximum authorisé(248).")
Catch ex As SecurityException
Console.WriteLine("CopyDirectory a échoué car l'utilisateur n'a pas les droits nécessaires sur : '" + _
fromFullPath + "' ou " + My.Computer.FileSystem.GetParentPath(toFilePath) + "' .")
Catch ex As UnauthorizedAccessException
Console.WriteLine("CopyDirectory a échoué car l'utilisateur n'a pas les droits d'accès nécessaires.")
Catch ex As IOException
Console.WriteLine("CopyFile a échoué car :")
If My.Computer.FileSystem.DirectoryExists(toFilePath) Then
Console.WriteLine("Un dossier dans le repertoire cible avec le même nom '" + toFilePath + _
"' est déjà en service.")
ElseIf fromFullPath = toFilePath Then
Console.WriteLine("le chemin source '" + fromFullPath + "' et le chemin destinataire :'" + toFilePath + _
"' sont identiques")
ElseIf My.Computer.FileSystem.FileExists(toFilePath) Then
Console.WriteLine(toFilePath + " existe déjà. Le paramètre 'overwrite' de CopyFile est à False")
Else : Console.WriteLine(ex.ToString())
End If
Catch ex As Exception
Console.WriteLine("CopyDirectory a échoué car ")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-06. Procedure FileSystem.CreateDirectory
Shared Sub CreateDirectory(dirPath As String) |
Crée le répertoire spécifié
![warning](http://www.developpez.be/images/kitwarning.gif) |
Si le repertoire spécifié existe déjà, aucune exception ne sera levée.
Attention, si par inadvertance vous indiquez un chemin de fichier au lieu de celui d'un repertoire,
aucune exception ne sera levée, votre repertoire sera donc nommé par exemple 'fichier.txt' .
|
CreateDirectorySample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.IO
Imports System.Security
Private Shared Sub CreateDirectorySample()
Dim dirPath As String = "C:\DirForTest\NewDirectory"
Console.WriteLine("Le répertoire qui sera créé est: '" + dirPath + "' .")
Console.WriteLine("CreateDirectory en cours...")
Try
My.Computer.FileSystem.CreateDirectory(dirPath)
Console.WriteLine("CreateDirectory terminé avec succès.")
Catch ex As ArgumentNullException
Console.WriteLine("CreateDirectory a échoué car le chemin de répertoire est vide.")
Catch ex As NotSupportedException
Console.WriteLine("CreateDirectory a échoué car le chemin de répertoire '" + dirPath + "' n'est pas valide.")
Console.WriteLine(ex.ToString())
Catch ex As PathTooLongException
Console.WriteLine("CreateDirectory a échoué car la longueur du chemin spécifié(" + dirPath.Length.ToString() + _
") excède le maximum authorisé(248).")
Catch ex As IOException
Console.WriteLine(CreateDirectory a échoué car le répertoire parent '" + _
My.Computer.FileSystem.GetParentPath(dirPath) + "' est en lecture seule")
'Dans le cas d'un problème de sécurité
Catch ex As SecurityException
Console.WriteLine("CreateDirectory a échoué car l'utilisateur n'a pas les droits nécessaires sur : '" + _
My.Computer.FileSystem.GetParentPath(dirPath) + "' .")
'Dans le cas d'un défaut d'autorisation d'accès
Catch ex As UnauthorizedAccessException
Console.WriteLine("CreateDirectory a échoué car l'utilisateur n'a pas les droits d'accès nécessaires.")
'Dans tous les autres cas d'exception
Catch ex As Exception
Console.WriteLine("CopyDirectory a échoué car :")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-07. Procedure FileSystem.DeleteDirectory
Shared Sub DeleteDirectory(...) |
Supprime le répertoire spécifié. Il existe 3 surcharges differentes à cette procedure :
Shared Sub DeleteDirectory(dirPath As String, onDirNotEmpty As DeleteDirectoryOption)
Shared Sub DeleteDirectory(dirPath As String, opt As UIOption, recycle As RecycleOption)
Shared Sub DeleteDirectory(dirPath As String, opt As UIOption, recycle As RecycleOption, _
onCancel As UICancelOption) |
![warning](http://www.developpez.be/images/kitwarning.gif) |
Le paramètre DeleteDirectoryOption : onDirNotEmpty
indique ce qui doit être fait quand le répertoire à supprimé n'est pas vide (la valeur par défaut est DeleteAllContents).
La seule autre possibilité proposée par DeleteDirectoryOption est de lever une IOException.
Les paramètres UIOption et UICancelOption permettent
de proposer à l'utilisateur les boîtes de dialogues necessaires pour suivre et gérer la progression de l'opération.
Le paramètre RecycleOption : recycle
indique si le dossier supprimé doit être envoyé à la corbeille ou directement effacer
( la valeur par défaut est DeletePermanently).
Les paramètres UIOption, UICancelOption, RecycleOption
ne sont pas supportés pour une application n'ayant pas d'interface utilisateur, telle qu'un Service Windows.
|
DeleteDirectorySample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.IO
Imports System.Security
Private Shared Sub DeleteDirectorySample()
Dim dirPath As String = "C:\DirForTest\NewDirectory"
Console.WriteLine("Le répertoire : '" + dirPath + "' sera supprimé.")
Console.WriteLine("DeleteDirectory en cours...")
Try
My.Computer.FileSystem.DeleteDirectory(dirPath, DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
Console.WriteLine("DeleteDirectory terminé avec succès.")
Catch ex As ArgumentNullException
Console.WriteLine("DeleteDirectory a échoué car le chemin de répertoire est vide.")
Catch ex As DirectoryNotFoundException
Console.WriteLine("DeleteDirectory a échoué car :")
If My.Computer.FileSystem.FileExists(dirPath) Then
Console.WriteLine("le chemin '" + dirPath + "' concerne un fichier.")
Else : Console.WriteLine("le répertoire '" + dirPath + "' n'a pas été trouvé.")
End If
Catch ex As NotSupportedException
Console.WriteLine("DeleteDirectory a échoué car le chemin de répertoire '" + dirPath + "' n'est pas valide.")
Console.WriteLine(ex.ToString())
Catch ex As PathTooLongException
Console.WriteLine("DeleteDirectory a échoué car la longueur du chemin spécifié(" + dirPath.Length.ToString() + _
") excède le maximum authorisé(248).")
Catch ex As IOException
Console.WriteLine(DeleteDirectory a échoué car le répertoire '" + dirPath + _
"' n'est pas vide et le paramètre 'onDirectoryNotEmpty' est 'ThrowIfDirectoryNonEmpty'")
'Dans le cas d'un problème de sécurité
Catch ex As SecurityException
Console.WriteLine("DeleteDirectory a échoué car l'utilisateur n'a pas les droits nécessaires sur : '" + _
dirPath + "' .")
'Dans tous les autres cas d'exception
Catch ex As Exception
Console.WriteLine("DeleteDirectory a échoué car :")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-08. Procedure FileSystem.DeleteFile
Shared Sub DeleteFile(...) |
Supprime le fichier spécifié. Il existe 3 surcharges differentes à cette procedure :
Shared Sub DeleteFile(filePath As String)
Shared Sub DeleteFile(filePath As String, opt As UIOption, recycle As RecycleOption)
Shared Sub DeleteFile(filePath As String, opt As UIOption, recycle As RecycleOption, onCancel As UICancelOption) |
![warning](http://www.developpez.be/images/kitwarning.gif) |
Les paramètres UIOption et UICancelOption permettent
de proposer à l'utilisateur des boîtes de dialogues afin de suivre et gérer la progression de l'opération.
Le paramètre RecycleOption : recycle
indique si le fichier supprimé doit être envoyé à la corbeille ou directement effacer
( la valeur par défaut est DeletePermanently).
Les paramètres UIOption, UICancelOption, RecycleOption
ne sont pas supportés pour une application n'ayant pas d'interface utilisateur, telle qu'un Service Windows.
|
DeleteFileSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.IO
Imports System.Security
Private Shared Sub DeleteFileSample()
Dim filePath As String = "C:\DirForTest\test1.txt"
Console.WriteLine("Le fichier : '" + filePath + "' sera supprimé.")
Console.WriteLine("DeleteFile en cours...")
Try
My.Computer.FileSystem.DeleteFile(filePath)
Console.WriteLine("DeleteFile terminé avec succès.")
Catch ex As ArgumentNullException
Console.WriteLine("DeleteFile a échoué car le chemin du fichier est vide.")
Catch ex As FileNotFoundException
Console.WriteLine("DeleteFile a échoué car le fichier '" + filePath + "' n'a pas été trouvé.")
Catch ex As NotSupportedException
Console.WriteLine("DeleteFile a échoué car le chemin de fichier '" + filePath + "' n'est pas valide.")
Console.WriteLine(ex.ToString())
Catch ex As PathTooLongException
Console.WriteLine("DeleteFile a échoué car la longueur du chemin spécifié(" + filePath.Length.ToString() + _
") excède le maximum authorisé(248).")
Catch ex As IOException
Console.WriteLine(DeleteFile a échoué car le fichier '" + filePath + " est actuellement utilisé par un autre processus")
'Dans le cas d'un problème de sécurité
Catch ex As SecurityException
Console.WriteLine("DeleteFile a échoué car l'utilisateur n'a pas les droits nécessaires sur : '" + filePath + "' .")
'Dans le cas d'un défaut de permission
Catch ex As UnauthorizedAccessException
Console.WriteLine("DeleteFile a échoué car l'utilisateur n'est pas autorisé à supprimer '" + filePath + "' .")
'Dans tous les autres cas d'exception
Catch ex As Exception
Console.WriteLine("DeleteFile a échoué car :")
Console.WriteLine(ex.ToString())
End Try
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-09. Fonction FileSystem.DirectoryExists
Shared Function DirectoryExists(dirPath As String) As Boolean |
Détermine si le répertoire spécifié existe
![warning](http://www.developpez.be/images/kitwarning.gif) |
Cette fonction ne lève par elle-même aucune exception.
Attention si l'application ne possède pas les permissions suffisantes,
telles que PermissionState.Unrestricted,
DirectoryExists peut retourner False
alors que le répertoire existe.
|
DirectoryExistsSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Private Shared Sub DirectoryExistsSample()
Dim dirPath As String = "C:\WINNT\inf"
If My.Computer.FileSystem.DirectoryExists(dirPath) Then
Console.WriteLine("le repertoire '" + dirPath + "' existe bien.")
ElseIf My.Computer.FileSystem.FileExists(dirPath) Then
Console.WriteLine("le chemin '" + dirPath + "' désigne un fichier et non un répertoire.")
Else
Console.WriteLine("le repertoire '" + dirPath + "' n'a pas été trouvé, ou vous n'avez pas d'accès à ce répertoire.")
End If
Console.Read()
End Sub |
III-A-1-10. Fonction FileSystem.FileExists
Shared Function FileExists(filePath As String) As Boolean |
Détermine si le fichier spécifié existe
![warning](http://www.developpez.be/images/kitwarning.gif) |
Cette fonction ne lève en fait par elle-même aucune exception,
bien que la documentation MSDN 2005 prétende :
![MSDN 2005 FileExists](./images/fileExistsMSDN.gif)
Attention si l'application ne possède pas les permissions suffisantes,
telles que PermissionState.Unrestricted,
FileExists peut retourner False
alors que le fichier existe.
|
FileExistsSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Private Shared Sub FileExistsSample()
Dim filePath As String = "C:\WINNT\inf\1394.inf"
If My.Computer.FileSystem.FileExists(filePath) Then
Console.WriteLine("le fichier '" + filePath + "' existe bien.")
ElseIf filePath.EndsWith("\") Then
Console.WriteLine(filePath + " contient un backslash('\') terminal inopportun.")
Dim newPath As String = filePath.Substring(0, filePath.Length - 1)
If My.Computer.FileSystem.FileExists(newPath) Then
Console.WriteLine("Cependant le fichier '" + newPath + "' existe bien.")
ElseIf My.Computer.FileSystem.DirectoryExists(filePath) Then
Console.WriteLine(filePath + " est un répertoire existant, non un fichier.")
Else
Console.WriteLine(newPath + " ne designe ni un répertoire ni un fichier accessible.")
End If
ElseIf My.Computer.FileSystem.DirectoryExists(filePath) Then
Console.WriteLine("le chemin '" + filePath + "' est un répertoire existant, non un fichier.")
Else
Console.WriteLine("le fichier '" + filePath + "' n'a pas été trouvé, ou vous n'avez pas d'accès à ce fichier.")
End If
Console.Read()
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-11. Fonction FileSystem.FindInFiles
Shared Function FindInFiles(...) As ReadOnlyCollection(Of String) |
Retourne une collection en lecture seule des noms des fichiers qui contiennent le texte spécifié.
Il existe 2 surcharges differentes à cette fonction :
Shared Function FindInFiles(dirPath As String , text As String, ignoreCase As Boolean, opt As SearchOption) _
As ReadOnlyCollection(Of String)
Shared Function FindInFiles(dirPath As String , text As String, ignoreCase As Boolean, opt As SearchOption, _
ParamArray extensions As String()) As ReadOnlyCollection(Of String) |
![warning](http://www.developpez.be/images/kitwarning.gif) |
Une collection vide est retournée si la chaine de caractères spécifiée n'est pas trouvé en fonction du modèle de recherche indiqué.
Le booléen ignoreCase doit avoir la valeur False
pour une recherche case-sensitive. La valeur par défaut est True.
Le paramètre SearchOption : opt permet d'inclure ou pas
les sous-repertoires du dossier spécifié.
Le ParamArray : extensions permet de limiter les types des fichiers concernés par la recherche,
soit par exemple :
|
FindInFilesSample |
Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports Microsoft.VisualBasic.Strings
Imports System
Imports System.IO
Imports System.Security
Private Shared Sub FindInFilesSample()
Dim dirPath As String
Dim saisie As Integer
Dim text As String
Dim ignorecase As Boolean
Dim searchoption As FileIO.SearchOption
Dim files As ReadOnlyCollection(Of String)
Console.WriteLine("Saisissez le repertoire de la recherche puis 'Enter'")
dirPath = Console.ReadLine()
Console.WriteLine("Le repertoire de la recherche est: " + dirPath)
Console.WriteLine()
Console.WriteLine("Saisissez le texte à rechercher puis 'Enter'")
text = Console.ReadLine()
Console.WriteLine("Le texte recherché est: " + text)
Console.WriteLine()
Console.WriteLine("Choisissez une des options suivantes :")
Console.WriteLine(Space(3) + "0 : Respecter la casse")
Console.WriteLine(Space(3) + "1 : Ignorer la casse")
saisie = Console.Read()
While (Not(saisie = 48) AndAlso Not(saisie = 49))
saisie = Console.Read()
End While
If saisie = 48 Then ignoreCase = False Else ignoreCase = True
Console.WriteLine("Vous avez choisi IgnoreCase = " + ignoreCase.ToString())
Console.WriteLine()
Console.WriteLine("Choisissez une des options suivantes :")
Console.WriteLine(Space(1) + "0 : Chercher aussi dans les sous-repertoires de " + dirPath)
Console.WriteLine(Space(1) + "1 : Ignorer les sous-repertoires de " + dirPath)
saisie = Console.Read()
While (Not(saisie = 48) AndAlso Not(saisie = 49))
saisie = Console.Read()
End While
If saisie = 48 _
Then searchoption = FileIO.SearchOption.SearchAllSubDirectories _
Else searchoption = FileIO.SearchOption.SearchTopLevelOnly
Console.WriteLine("Vous avez choisi SearchOption = " + searchoption.ToString())
Console.WriteLine()
Console.WriteLine("FindInFiles en cours...")
Try
files = My.Computer.FileSystem.FindInFiles(dirPath, text, ignorecase, searchoption)
Console.WriteLine("FindInFiles terminé avec succès. " + files.Count.ToString() + " fichier(s) trouvé(s):")
Console.WriteLine("---------------------------------------------------------------")
For Each file As String In files
Console.WriteLine(Space(1) + file)
Next
Catch ex As ArgumentNullException
Console.WriteLine("FindInFiles a échoué car le chemin de répertoire est vide.")
Catch ex As DirectoryNotFoundException
Console.WriteLine("FindInFiles a échoué car le répertoire '" + dirPath + "' n'a pas été trouvé.")
Catch ex As NotSupportedException
Console.WriteLine("FindInFiles a échoué car le chemin de répertoire '" + dirPath + "' n'est pas valide.")
Catch ex As PathTooLongException
Console.WriteLine("FindInFiles a échoué car la longueur du chemin spécifié(" + dirPath.Length.ToString() + _
") excède le maximum authorisé(248).")
Catch ex As IOException
Console.WriteLine("FindInFiles a échoué car le chemin spécifié '" + dirPath + _
"' correspond à un fichier existant, et non un répertoire")
Catch ex As SecurityException
Console.WriteLine("FindInFiles a échoué car l'utilisateur n'a pas les droits nécessaires sur : '" + dirPath + "' .")
Catch ex As UnauthorizedAccessException
Console.WriteLine("FindInFiles a échoué car l'utilisateur n'a pas les droits d'accès nécessaires.")
Catch ex As Exception
Console.WriteLine("FindInFiles a échoué car :")
Console.WriteLine(ex.ToString())
Finally
Console.WriteLine("***************************************************************")
Console.WriteLine()
End Try
End Sub |
![retour Class FileSystem](./images/top.gif)
III-A-1-12. Fonction FileSystem.GetDirectories
Shared Function GetDirectories(...) As ReadOnlyCollection(Of String) |
Retourne une collection en lecture seule des chemins des sous-repertoires contenus par le repertoire spécifié.
Il existe 2 surcharges differentes à cette fonction :
Shared Function GetDirectories(dir As String) As ReadOnlyCollection(Of String)
Shared Function GetDirectories(dir As String, opt As SearchOption, _
ParamArray pattern As String()) As ReadOnlyCollection(Of String) |
III-A-1-13. Fonction FileSystem.GetDirectoryInfo
Shared Function GetDirectoryInfo(dirPath As String) As DirectoryInfo |
Retourne le DirectoryInfo du chemin spécifié
III-A-1-14. Fonction FileSystem.GetDriveInfo
Shared Function GetDriveInfo(drive As String) As DriveInfo |
III-A-1-15. Fonction FileSystem.GetFileInfo
Shared Function GetFileInfo(filePath As String) As FileInfo |
Retourne le FileInfo du chemin de fichier spécifié
III-A-1-16. Fonction FileSystem.GetFiles
Shared Function GetFiles(...) As ReadOnlyCollection(Of String) |
Retourne une collection en lecture seule des noms des fichier contenus par le repertoire spécifié.
Il existe 2 surcharges differentes à cette fonction :
Shared Function GetFiles(dir As String) As ReadOnlyCollection(Of String)
Shared Function GetFiles(dir As String, opt As SearchOption, _
ParamArray pattern As String()) As ReadOnlyCollection(Of String) |
III-A-1-17. Fonction FileSystem.GetName
Shared Function GetName(path As String) As String |
Extrait le nom du fichier du chemin spécifié et le retourne
III-A-1-18. Fonction FileSystem.GetParentPath
Shared Function GetParentPath(path As String) As String |
Retourne le chemin du répertoire parent du chemin spécifié
III-A-1-19. Fonction FileSystem.GetTempFileName
Shared Function GetTempFileName() As String |
Crée un fichier temporaire sur le disque (uniquement nommé zero-byte) et retourne le chemin complet de celui-ci
III-A-1-20. Procedure FileSystem.MoveDirectory
Shared Sub MoveDirectory(...) |
Déplace le repertoire spécifié vers le nouveau chemin spécifié. Il existe 4 surcharges differentes à cette procédure :
Shared Sub MoveDirectory(fromFullPath As String, toDirPath As String)
Shared Sub MoveDirectory(fromFullPath As String, toDirPath As String, _
overwrite As Boolean)
Shared Sub MoveDirectory(fromFullPath As String, toDirPath As String>, _
opt As UIOption)
Shared Sub MoveDirectory(fromFullPath As String, toDirPath As String, _
opt As UIOption, onCancel As UICancelOption) |
III-A-1-21. Procedure FileSystem.MoveFile
Déplace le fichier spécifié vers le nouveau chemin spécifié. Il existe 4 surcharges differentes à cette procédure :
Shared Sub MoveFile(fromFullPath As String, toFullPath As String)
Shared Sub MoveFile(fromFullPath As String, toFullPath As String, _
overwrite As Boolean)
Shared Sub MoveFile(fromFullPath As String, toFullPath As String>, _
opt As UIOption)
Shared Sub MoveFile(fromFullPath As String, toFullPath As String, _
opt As UIOption, onCancel As UICancelOption) |
III-A-1-22. Fonction FileSystem.OpenTextFieldParser
Shared Function OpenTextFieldParser(...) As TextFieldParser |
Fournit un TextFieldParser pour le fichier texte structuré spécifié. Il existe 3 surcharges differentes à cette fonction :
Shared Function OpenTextFieldParser(textFile As String) As TextFieldParser
Shared Function OpenTextFieldParser(textFile As String, _
ParamArray fieldWidths As Integer()) As TextFieldParser
Shared Function OpenTextFieldParser(textFile As String, _
ParamArray delimiters As String()) As TextFieldParser |
III-A-1-23. Fonction FileSystem.OpenTextFileReader
Shared Function OpenTextFileReader(...) As StreamReader |
Fournit un StreamReader pour le chemin du fichier spécifié. Il existe 2 surcharges differentes à cette fonction :
Shared Function OpenTextFileReader(filePath As String) As StreamReader
Shared Function OpenTextFileReader(filePath As String, _
encode As Encoding) As StreamReader |
III-A-1-24. Fonction FileSystem.OpenTextFileWriter
Shared Function OpenTextFileWriter(...) As StreamWriter |
Fournit un StreamWriter pour le chemin du fichier spécifié. Il existe 2 surcharges differentes à cette fonction :
Shared Function OpenTextFileWriter(filePath As String, _
append As Boolean) As StreamWriter
Shared Function OpenTextFileWriter(filePath As String, _
append As Boolean, encode As Encoding) As StreamWriter |
III-A-1-25. Fonction FileSystem.ReadAllBytes
Shared Function ReadAllBytes(filePath As String) As Byte() |
Retourne sous forme d'un Byte( ) tout le contenu du fichier spécifié.
III-A-1-26. Fonction FileSystem.ReadAllText
Shared Function ReadAllText(...) As String |
Retourne sous forme d'une chaine de caractères le contenu du fichier texte spécifié.
Il existe 2 surcharges differentes à cette fonction :
Shared Function ReadAllText(textFilePath As String) As String
Shared Function ReadAllText(textFilePath As String, _
encode As Encoding) As String |
III-A-1-27. Procedure FileSystem.RenameDirectory
Shared Sub RenameDirectory(dirPath As String, newDirName As String) |
Renomme le répertoire spécifié, avec le nouveau nom spécifié.
III-A-1-28. Procedure FileSystem.RenameFile
Shared Sub RenameFile(filePath As String, newFileName As String) |
Renomme le fichier spécifié, avec le nouveau nom spécifié.
III-A-1-29. Procedure FileSystem.WriteAllBytes
Shared Sub WriteAllBytes(filePath As String, data As Byte(), append As Boolean) |
Ecrit les données du Byte( ) spécifié dans le fichier spécifié.
III-A-1-30. Procedure FileSystem.WriteAllText
Shared Sub WritedAllText(...) |
Ecrit la chaine de caractères dans le fichier texte spécifié.
Il existe 2 surcharges differentes à cette fonction :
Shared Sub WritedAllText(textFilePath As String, text As String, _
append As Boolean)
Shared Sub WritedAllText(textFilePath As String, text As String _
append As Boolean, encode As Encoding) |
Exemple Console. FileSystemFullSample
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de la classe FileSystem
|
FileSystemFullSample | Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.Text
Class MainClass
Shared Sub Main()
TestFileSystem()
End Sub
Private Shared Sub TestFileSystem()
Console.Read()
End Sub
End Class |
III-A-2. Class MalformedLineException
![retour III-A. Particularités Visual Basic](./images/top.gif)
Classe dérivée de System.Exception spécifiquement levée par la fonction TextFieldParser.ReadFields() lorsqu'elle ne peut analyser une ligne dans le format spécifié.
Par la propriété MalformedLineException.LineNumber, vous obtenez le numéro de la ligne incorrectement formée.
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de la classe MalformedLineException
Ce petit code-test tente de parser un fichier texte structuré TestMalFormed.txt, selon un format imposé de largeur des champs
|
|
Fichier 'TestMalFormed.txt' | 0001 Nom1 Description1
0002Nom2Description2 |
|
Exemple Console : 'TestMalformedLineException' | Option Explicit On
Option Strict On
Imports Microsoft.VisualBasic.FileIO
Imports System
Imports System.Text
Class MainClass
Shared Sub Main()
TestMalformedLineException()
End Sub
Private Shared Sub TestMalformedLineException()
Using lecteur As New TextFieldParser("C:\TestMalFormed.txt", Encoding.Default)
lecteur.TextFieldType = FieldType.FixedWidth
lecteur.SetFieldWidths(4, 10, 21)
While Not lecteur.EndOfData
Console.WriteLine()
Try
For Each champ As String In lecteur.ReadFields()
Console.WriteLine(champ)
Next
Catch e As MalformedLineException
Dim erreur As New StringBuilder(String.Empty)
erreur.Append("La ligne ")
erreur.Append(e.LineNumber.ToString())
erreur.Append(" ne peut être analysée, car elle")
erreur.Append(" ne répond pas au format spécifié")
Console.WriteLine(erreur.ToString())
End Try
End While
End Using
Console.Read()
End Sub
End Class |
|
III-A-3. Class SpecialDirectories
Classe qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de la classe SpecialDirectories
|
|
III-A-4. Class TextFieldParser
Classe qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de la classe TextFieldParser
|
|
III-A-5. Enum DeleteDirectoryOption
Enumération qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de l'énumération DeleteDirectoryOption
|
|
III-A-6. Enum FieldType
Enumération qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de l'énumération FieldType
|
|
III-A-7. Enum RecycleOption
Enumération qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de l'énumération RecycleOption
|
|
III-A-8. Enum SearchOption
Enumération qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de l'énumération SearchOption
|
|
III-A-9. Enum UICancelOption
Enumération qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de l'énumération UICancelOption
|
|
III-A-9. Enum UIOption
Enumération qui
|
![info](http://www.developpez.be/images/kitinfo.gif) |
Voici un exemple simple pour vous familiariser avec l'utilisation de l'énumération UIOption
|
|
III-B. Nouvelles Classes :
III-B-1. DriveInfo
III-B-2. DeflateStream
III-B-3. GzipStream
III-B-4. SerialPort
III-C. Modifications :
III-C-1. Enumération FileOptions
III-C-2. Mode Asynchrone
IV. Sécurité :
![Niveau Avancé Confirmé](./images/niveau-avance-confirme.gif) Niveau
IV-A. Gestion par programmation des Access Control Lists
V. Liens Complémentaires:
![Valid XHTML 1.1!](http://www.w3.org/Icons/valid-xhtml11) ![Valid CSS!](http://jigsaw.w3.org/css-validator/images/vcss)
|