FAQ ASP.NET/VB.NETConsultez toutes les FAQ

Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 28 juin 2013 

 
OuvrirSommaireCoté serveur et C#Manipulations des fichiers

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:

 
Sélectionnez

Dim PhysicalPath As String = Server.MapPath("nomfichier.mdb")
				

Cet exemple initialisera PhysicalPath avec l'adresse physique du fichier nomfichier.mdb.

Créé le 19 juin 2005  par Didier Danse

Nous allons afficher tous les fichiers d'un répertoire dans une ListBox :

 
Sélectionnez

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

Créé le 12 octobre 2003  par David Pedehourcq

Pour créer, copier, déplacer ou supprimer un fichier, on utilise la classe System.IO.File

 
Sélectionnez

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
				
Créé le 19 juin 2005  par abelman

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

 
Sélectionnez

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
				
Créé le 19 juin 2005  par abelman

Lien : System.IO.StreamWriter
Lien : System.IO.StreamReader

On utilise la fonction GetFileSystemEntries de la classe System.IO.Directory

 
Sélectionnez

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

 
Sélectionnez

System.IO.Directory.GetFiles()
				
Créé le 19 juin 2005  par abelman

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

 
Sélectionnez

Server.MapPath(".")
				

ce qui donne ...

 
Sélectionnez

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".

Créé le 3 octobre 2005  par Didier Danse

Lien : Comment lister les fichiers d'un répertoire?

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.

 
Sélectionnez

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".

Créé le 3 octobre 2005  par Didier Danse

Lien : Comment lister les répertoires d'une application?

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.

 
Sélectionnez

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".

Créé le 3 octobre 2005  par Didier Danse

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.

 
Sélectionnez

Imports System.IO
				

Pour lire tout le fichier, il suffit de boucler sur toutes les lignes du fichier.

 
Sélectionnez

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
				
Créé le 3 octobre 2005  par Xavier Talour

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.

 
Sélectionnez

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:

 
Sélectionnez

Imports System.IO
Imports System.Security.Permissions
Imports Microsoft.Win32
				
Créé le 3 octobre 2005  par Didier Danse

Il suffit d'utiliser

 
Sélectionnez

Dim BytesSize As Integer = FileInfo("nomfichier.ext").Length
				
Créé le 19 juin 2005  par Didier Danse

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 :

 
Sélectionnez
 
Fs.Open(Server.MapPath("./adresserelative/fichier.txt"))
Créé le 14 novembre 2007  par Didier Danse
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Dotnet Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.