C'est mon premier code posté, car débutant en ASP.NET et venant du VB6, y'a plein de questions au début que je me pose en codant...
Donc j'ai essayé de faire un code le plus simple possible pour naviguer dans les répertoires du serveur et d'afficher en même temps les fichiers...
Par contre aucune idée, si c 'est la technique officiel qu'il faut utiliser ou pas !!! donc je vous remercie de me donner des conseils...
Source / Exemple :
Téléchargez le ZIP pour avoir le projet !
En VB sous visual studio 2003, c 'est le code behind:
--------------------------------------------------------------------
Imports System.IO
Public Class WebForm1
Inherits System.Web.UI.Page
Private Const cSession_DossierEnCours = "DossierEnCours"
Private Const cSession_ListeDossiers = "ListeDossiers"
Protected WithEvents lblFichier As System.Web.UI.WebControls.Label
Private Const cSession_ListeFichiers = "ListeFichiers"
#Region " Code généré par le Concepteur Web Form "
'Cet appel est requis par le Concepteur Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents lblDossier As System.Web.UI.WebControls.Label
Protected WithEvents dlDossiers As System.Web.UI.WebControls.DataList
Protected WithEvents txtTypeFichier As System.Web.UI.WebControls.TextBox
Protected WithEvents dlfichiers As System.Web.UI.WebControls.DataList
Protected WithEvents cmdFichier As System.Web.UI.WebControls.LinkButton
'REMARQUE : la déclaration d'espace réservé suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou déplacer.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'éditeur de code.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Si la session existe pas: sauvegarde du répertoire par défaut
If Session(cSession_DossierEnCours) Is Nothing Then
Session(cSession_DossierEnCours) = Server.MapPath("")
End If
'Si la session existe pas: on récupere, affiche et sauvegarde la liste des répertoires
If Session(cSession_ListeDossiers) Is Nothing Then
mAffichage_Dossiers("")
End If
'Si la session existe pas: on récupere, affiche et sauvegarde la liste des fichiers
If Session(cSession_ListeFichiers) Is Nothing Then
mAffichage_Fichiers()
End If
End Sub
Private Sub mAffichage_Dossiers(ByRef sPath As String)
Dim sDirs As Array 'Liste des chemins des répertoires en bloc
Dim sDir As String 'nom de chaque chemin de répertoire
Dim Array As New ArrayList 'Tableau final avec juste le nom de chaque répertoire
'Récupére dans la session le nom du répertoire en cours
'j'utilise un objet directory car il s'occupe de mettre en forme valide un répertoire
Dim oMyDir As Directory
oMyDir.SetCurrentDirectory(Session(cSession_DossierEnCours))
'Récupére tous les sous-répertoires complet
sDirs = Directory.GetDirectories(oMyDir.GetCurrentDirectory & Path.DirectorySeparatorChar & sPath)
'Réinitialise le répertoire en cours
oMyDir.SetCurrentDirectory(oMyDir.GetCurrentDirectory & Path.DirectorySeparatorChar & sPath & Path.DirectorySeparatorChar)
lblDossier.Text = oMyDir.GetCurrentDirectory
'Sauvegarde dans la session le répertoire en cours
Session(cSession_DossierEnCours) = oMyDir.GetCurrentDirectory
'Met dans un tableau uniquement le nom de répertoire
Array.Clear()
Array.Add("../")
For Each sDir In sDirs
Array.Add(Path.GetFileName(sDir))
Next
'Affichage des répertoires dans une datalist
With dlDossiers
.DataSource = Array
.DataBind()
.Dispose()
End With
'Sauvegarde du tableau de répetoire dans une session
'pour gérer par la suite l'événement de la datalist
Session(cSession_ListeDossiers) = Array
End Sub
Private Sub mAffichage_Fichiers()
Dim sFiles As Array 'Liste des fichiers en bloc
Dim sFile As String 'nom de chaque fichier
Dim Array As New ArrayList 'Tableau final avec la classe FileInfo concernant chaque fichier
'Vérifie qu'il y a une extension
Dim sTemp As String = txtTypeFichier.Text
If sTemp.Length = 0 Then sTemp = "*.*"
'Récupére la liste des fichiers du répertoire de la session
sFiles = (Directory.GetFiles(Session(cSession_DossierEnCours), sTemp))
For Each sFile In sFiles
Array.Add(New FileInfo(sFile))
Next
'Affichage des fichiers dans une datalist
With dlfichiers
.DataSource = Array
.DataBind()
.Dispose()
End With
'Sauvegarde du tableau de fichier dans une session
'pour gérer par la suite l'événement de la datalist
Session(cSession_ListeFichiers) = Array
End Sub
Private Sub dlFichiers_EditCommand(ByVal source As System.Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles dlfichiers.EditCommand
'Lorsque l'on clique sur un élément de la datalist
'on récupére l'index pour savoir quel est l'élément du tableau sauvegardé
'dans la session
Dim oFile As FileInfo = Session(cSession_ListeFichiers)(e.Item.ItemIndex)
lblFichier.Text = oFile.Name
End Sub
Private Sub dlDossiers_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles dlDossiers.EditCommand
'Lorsque l'on clique sur un élément de la datalist
'on récupére l'index pour savoir quel est l'élément du tableau sauvegardé
'dans la session
mAffichage_Dossiers(Session(cSession_ListeDossiers)(e.Item.ItemIndex))
mAffichage_Fichiers()
End Sub
Private Sub txtTypeFichier_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTypeFichier.TextChanged
mAffichage_Fichiers()
End Sub
End Class
En VB sous visual studio 2003, c 'est le code HTML:
--------------------------------------------------------------------
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="index.aspx.vb" Inherits="nav_dossier.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<font face="Tahoma" size="2">
<form runat="server">
Répertoire en cours:
<asp:Label id="lblDossier" runat="server" ForeColor="Green">Label</asp:Label>
<!-- Liste des répertoires -->
<asp:datalist id="dlDossiers" runat="server" ShowHeader="False" ShowFooter="False" RepeatDirection="Vertical"
RepeatColumns="1">
<ItemTemplate>
<font face="Tahoma" size="2">
<asp:LinkButton id="cmdDossier" CommandName="edit" runat="server">
<%# container.dataitem %></font> </asp:LinkButton>
</ItemTemplate>
</asp:datalist><br>
Type de fichiers:
<asp:TextBox id="txtTypeFichier" runat="server" Width="32px">*.*</asp:TextBox>
<!-- Liste des fichiers -->
<asp:datalist id="dlfichiers" runat="server" ShowHeader="False" ShowFooter="False" RepeatDirection="Vertical"
RepeatColumns="1">
<ItemTemplate>
<font face="Tahoma" size="2">
<asp:LinkButton id="cmdFichier" CommandName="edit" runat="server">
<%# container.dataitem %>
</asp:LinkButton>
</font>
</ItemTemplate>
</asp:datalist>
<br>
<br>
<asp:Label id="lblFichier" runat="server" ForeColor="Green"></asp:Label>
</form>
</font>
</body>
</HTML>
Conclusion :
Je viens d'avoir un message sur le forum(en référence à une question concernant cette source) du trés trés actif Fabrice69... Il a un source qui fait bien plus que cet exemple:
http://www.aspfr.com/code.aspx?id=23262
Mais bon cet exemple est surtout fait pour avoir votre avis sur la technique utilisée...
Merci
Bart-Rennes
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.