FAQ ASP.NET/VB.NET
FAQ ASP.NET/VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 16 juin 2021
- J'ai besoin de connaître le répertoire physique de mon application asp.NET. Comment faire?
- Comment afficher tous les fichier d'un répertoire du serveur ?
- Comment créer, copier, déplacer, supprimer un fichier ?
- Comment lire et écrire dans un fichier texte ?
- Comment obtenir la liste des fichiers et des sous-répertoires d'un répertoire ?
- Comment lister les répertoires d'une application?
- Comment lister les fichiers d'un répertoire?
- Comment connaître la taille totale du contenu d'un répertoire?
- Comment lire un fichier ligne par ligne?
- Comment récupérer le content-type d'un fichier?
- Comment connaître la taille d'un fichier?
- Comment permettre d'utiliser des fichiers de manière relative ?
Pour lister les fichiers d'un répertoire ou pour accéder à une base de données
Access, il nous est parfois nécessaire de savoir l'adresse exacte du répertoire
physique dans lequel se trouve l'application.
Cela est possible à l'aide de:
Dim
PhysicalPath As
String
=
Server
.MapPath
(
"nomfichier.mdb"
)
Cet exemple initialisera PhysicalPath avec l'adresse physique du fichier nomfichier.mdb.
Nous allons afficher tous les fichiers d'un répertoire dans une ListBox :
Dim
dir As
New
DirectoryInfo
(
"C:\MonChemin"
)
MalLsttBox.DataSource
=
dir.GetFiles
(
"*.*"
)
MalLsttBox.DataBind
(
)
Note : attention à bien paramètrer vos droits de manière à ce que le user ASPNET puisse parcourir le répertoire ;)
Pour créer, copier, déplacer ou supprimer un fichier, on utilise la classe System.IO.File
Imports
System
Imports
System.IO
Public
Shared
Sub
FileTests
(
)
Try
'Création d un fichier vide
Dim
fs As
FileStream =
File.Create
(
"myfile.txt"
)
fs.Close
Console.WriteLine
(
"fichier myfile.txt créé"
)
'Copie de fichier
File.Copy
(
"myfile.txt"
, "copyofmyfile.txt"
)
Console.WriteLine
(
"fichier myfile.txt copié vers copyofmyfile.txt"
)
'Déplacement de fichier
File.Move
(
"copyofmyfile.txt"
, "c:\copyofmyfile.txt"
)
Console.WriteLine
(
"fichier copyofmyfile.txt déplacé vers c:\copyofmyfile.txt"
)
'Suppression de fichier
File.Delete
(
"c:\copyofmyfile.txt"
)
Console.WriteLine
(
"Fichier c:\copyofmyfile.txt supprimé"
)
Catch
e As
Exception
Debug.WriteLine
(
ex.ToString
)
Console.WriteLine
(
ex.Message
)
End
Try
End
Sub
Lien : System.IO.File
Nous allons ouvrir un fichier texte et le remplir s'il n'existe pas encore. Nous afficherons ensuite son contenu à l'écran. On utilisera pour cela les classes System.IO.StreamReader pour la lecture et System.IO.StreamWriter pour l'écriture
Imports
System
Imports
System.IO
Sub
FichierTexte
(
ByVal
nomFichier As
String
)
Dim
sr As
StreamReader =
Nothing
Dim
sw As
StreamWriter =
Nothing
Dim
line As
String
Try
If
Not
File.Exists
(
nomFichier) Then
' Le fichier n'existe pas. On le crée.
sw =
New
StreamWriter
(
nomFichier)
sw.WriteLine
(
"Bonjour. Nous sommes le {0} et il est {1} "
, DateTime.Now.ToLongDateString
, DateTime.Now.ToLongTimeString
)
sw.Close
sw =
Nothing
' Remarque : On peut utiliser sw = File.AppendText(NomFichier) pour ajouter
' du texte à un fichier existant
End
If
' Ouverture du fichier et écriture du contenu du fichier sur la console
sr =
New
StreamReader
(
nomFichier)
Console.WriteLine
(
"Début du fichier"
)
line =
sr.ReadLine
While
Not
(
line Is
Nothing
)
Console.WriteLine
(
line)
line =
sr.ReadLine
End
While
Console.WriteLine
(
"Fin du fichier"
)
Finally
' Fermeture streamreader
If
Not
(
sr Is
Nothing
) Then
sr.Close
End
If
' Fermeture streamwriter
If
Not
(
sw Is
Nothing
) Then
sw.Close
End
If
End
Try
End
Sub
Lien : System.IO.StreamWriter
Lien : System.IO.StreamReader
On utilise la fonction GetFileSystemEntries de la classe System.IO.Directory
Imports
System.IO
Imports
System
Shared
Sub
Dir
(
ByVal
directory As
String
)
Dim
files As
String
(
)
files =
Directory.GetFileSystemEntries
(
directory)
Dim
filecount As
Integer
=
files.GetUpperBound
(
0
) +
1
Dim
i As
Integer
=
0
While
i <
filecount
Response
.Write
(
files[i])
System.Math.Min
(
System.Threading.Interlocked.Increment
(
i),i-
1
)
End
While
End
Sub
Pour avoir juste les noms des fichiers et pas les sous-répertoires d'un répertoire, on utilise
System.IO.Directory.GetFiles
(
)
Lien : System.IO.Directory
Il nous est souvent nécessaire de lister les répertoires présents dans le répertoire d'une application
asp.NET. Pour cela, il suffit de boucler sur la liste des DirectoryInfo renvoyés par
l'intermédiaire de la méthode GetDirectories de cette même classe DirectoryInfo.
Attention que la base de l'application doit être récupérée par l'intermédiaire de
Server
.MapPath
(
"."
)
ce qui donne ...
Dim
di As
System.IO.DirectoryInfo
=
New
System.IO.DirectoryInfo
(
Server
.MapPath
(
"."
))
For
Each
di2 As
System.IO.DirectoryInfo
In
di.GetDirectories
Response
.Write
(
di2.FullName
)
' Traitement quelconque
Next
Bien entendu vous pouvez (voire devez) gérer les exceptions du type "Répertoire inexistant" ou encore "Accès interdit".
Comme pour le listage des répertoires, une simple boucle suffit. DirectoryInfo fournit une méthode GetFiles qui se chargent de renvoyer la liste des fichiers du répertoires.
Il ne reste plus dès lors qu'à effectuer un traitement sur chacun des fichiers de cette liste.
Dim
di As
System.IO.DirectoryInfo
=
New
System.IO.DirectoryInfo
(
Server
.MapPath
(
"."
))
For
Each
fi As
System.IO.FileInfo
In
di.GetFiles
Response
.Write
(
fi.FullName
)
Next
Bien entendu vous pouvez (voire devez) gérer les exceptions du type "Répertoire inexistant" ou encore "Accès interdit".
Pour connaître la taille du contenu, il suffit d'additionner la taille de chacun des
fichiers de ce répertoire.
Voici une petite fonction permet d'effectuer cette opération.
Public
Function
DirectoryLength
(
ByVal
relativePath As
String
) As
Integer
Dim
bytes As
Integer
=
0
Dim
di As
System.IO.DirectoryInfo
=
New
System.IO.DirectoryInfo
(
Server
.MapPath
(
relativePath))
For
Each
fi As
System.IO.FileInfo
In
di.GetFiles
bytes +=
fi.Length
Next
Return
bytes
End
Function
Bien entendu vous pouvez (voire devez) gérer les exceptions du type "Répertoire inexistant" ou encore "Accès interdit".
Certes XML et les bases de données prennent de plus en plus de place dans le monde de l'informatique mais les fichiers dits "classiques" sont toujours bel et bien présents.
Voici comme lire un fichier et, ce, ligne par ligne.
Tout d'abord il faut utiliser le namespace System.IO.
Imports
System.IO
Pour lire tout le fichier, il suffit de boucler sur toutes les lignes du fichier.
Public
Sub
ReadByLine
(
ByVal
path As
String
)
Dim
sr As
StreamReader
Try
sr =
New
StreamReader
(
path)
Dim
contenu As
String
While
Not
((
contenu =
sr.ReadLine
) Is
Nothing
)
' Utiliser ce contenu
' Par exemple ajout d'une ListBox, ...
End
While
Catch
generatedExceptionVariable0 As
Exception
' Gestion de l'exception (FileNotFound, ...
' (redirection, ...)
Finally
sr.Close
End
Try
End
Sub
Les content-types se trouvent dans la base de registres. Il "suffit" de parcourir les associations extension / content-type pour retrouver celle qui correspond à l'extension de notre fichier.
Voici une fonction permettant d'effectuer cette recherche.
Public
Shared
Function
GetMIMEType
(
ByVal
filepath As
String
) As
String
Dim
regPerm As
RegistryPermission =
New
RegistryPermission
(
RegistryPermissionAccess.Read
, "\HKEY_CLASSES_ROOT"
)
Dim
classesRoot As
RegistryKey =
Registry.ClassesRoot
Dim
fi As
FileInfo =
New
FileInfo
(
filepath)
Dim
dotExt As
String
=
fi.Extension.ToLower
Dim
typeKey As
RegistryKey =
classesRoot.OpenSubKey
(
"MIME\Database\Content Type"
)
Dim
Keyname As
String
=
""
For
Each
keyname As
String
In
typeKey.GetSubKeyNames
Dim
curKey As
RegistryKey =
classesRoot.OpenSubKey
(
"MIME\Database\Content Type\"
+
keyname)
If
CType
(
curKey.GetValue
(
"Extension"
), String
) =
dotExt Then
Keyname =
keyname
End
If
Next
Return
Keyname
End
Function
Sans oublier d'importer les namespaces suivants:
Imports
System.IO
Imports
System.Security.Permissions
Imports
Microsoft.Win32
Il suffit d'utiliser
Dim
BytesSize As
Integer
=
FileInfo
(
"nomfichier.ext"
).Length
Lorsque vous ouvrez un fichier texte, par exemple, il vous faut savoir l'adresse physique de ce fichier. Malheureusement, nous ne connaissons que le chemin relatif bien souvent.
Server.MapPath est là pour nous aider. En lui passant le chemin relatif, Server.MapPath renverra le chemin physique complet.
Cela donne, dans l'exemple de l'ouverture d'un flux sur le fichier texte :
Fs.Open
(
Server
.MapPath
(
"./adresserelative/fichier.txt"
))