Bonjour,


Je dois réaliser un explorateur de fichier pour un site intranet. Le langage que je peux utiliser est le ASP.NET 2.0.

Je débute en programmation ASP.NET et C#, cependant j'ai les bases théoriques en POO.


Situation actuelle :

Actuellement je viens de réaliser une page Browser.aspx avec un code-behind qui me permet de récupérer le nom du dossier courant, le chemin absolu de ce dossier, la liste des fichiers avec leurs dates de dernière modification et leurs tailles. Pour cela j'utilise des fonctions (tout est en procédural donc).

>> Browser/Browser.aspx

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Browser.aspx.cs" Inherits="Browser_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link rel="stylesheet" media="screen" type="text/css" href="style.css" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
 
        <!-- Affichage du nom du répertoire courant -->
        <h1><% =dossierAffichage() %></h1>
        <!-- Affichage du chemin du répertoire courant -->
        <i><% =dossierChemin() %></i>
        <br /><br /><br />
 
        <table class="browser">
            <tr>
                <td class="browserFichierNom"><h2>Nom du fichier</h2></td>
                <td class="browserFichierDateModification"><h2>Modifié le</h2></td>
                <td class="browserFichierTaille"><h2>Taille</h2></td>
            </tr>
            <tr>
                    <!-- Affichage des fichiers du répertoire courant -->
                <td class="browserFichierNom"><asp:Label ID="lbFichierAffichage" runat="server" OnLoad="fichierAffichage" /></td>
                    <!-- Affichage de la date de dernière modification du fichier -->
                <td class="browserFichierDateModification"><asp:Label ID="lbFichierDateModification" runat="server" OnLoad="fichierDateModification" /></td>
                    <!-- Affichage de la taille des fichiers du répertoire courant -->
                <td class="browserFichierTaille"><asp:Label ID="lbFichierTaille" runat="server" OnLoad="fichierTaille" /></td>
 
            </tr>
        </table>
 
        <br />
        <% Response.Write(User.Identity.Name); %>
 
    </div>
    </form>
</body>
</html>
>> Browser/Browser.aspx.cs

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
public partial class Browser_Default : System.Web.UI.Page
{
 
    protected void Page_Load(object sender, EventArgs e)
    {
    }
 
    //
    // Fonction : Affichage du nom du répertoire
    //
    protected String dossierAffichage()
    {
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        return Dossier.Name.ToString();
    }
 
    //
    // Fonction : Affichage du chemin du répertoire
    //
    protected String dossierChemin()
    {
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        return Dossier.FullName.ToString();
    }
 
    //
    // Fonction : Affichage du nom du fichier
    //
    protected void fichierAffichage(Object Sender, EventArgs e)
    {
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        foreach (System.IO.FileInfo Fichier in Dossier.GetFiles())
        {
            lbFichierAffichage.Text += "<a href=\"" + Fichier.FullName + "\" target=\"_blank\">" + Fichier.Name + "</a><br />";
        }
    }
 
    //
    // Fonction : Affichage de la date de dernière modification du fichier
    //
    protected void fichierDateModification(Object Sender, EventArgs e)
    {
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        foreach (System.IO.FileInfo Fichier in Dossier.GetFiles())
        {
            lbFichierDateModification.Text += Fichier.LastWriteTime.ToString() + "<br />";
        }
    }
 
    //
    // Fonction : Affichage de la taille du fichier
    //
    protected void fichierTaille(Object Sender, EventArgs e)
    {
        int kiloByte = 1024;
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        foreach (System.IO.FileInfo Fichier in Dossier.GetFiles())
        {
            double tailleFichier = Fichier.Length / kiloByte;
            double resultat = Math.Ceiling(tailleFichier);
            lbFichierTaille.Text += resultat.ToString("#,0") + " Kb<br />";
        }
    }
 
}
>> Browser/style.css

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
body
{
    font-family: Arial, Times New Roman, Verdana;
    font-size: 13px;
    margin: 10px;
    padding: 10px;
}
 
h1 
{
    margin: 0px;
    padding: 0px;
}
 
h2 
{
    font-size: 16px;
    font-weight: bold;
    margin: 0px;
    padding: 0px;
}
 
table.browser 
{
    border: 1px solid black;
}
 
td.browserFichierNom
{
    padding-right: 10px;
    text-align: left;
    vertical-align: middle;
    width: 500px;
}
 
td.browserFichierDateModification 
{
    padding-left: 10px;
    padding-right: 10px;
    text-align: center;
    vertical-align: middle;
}
 
td.browserFichierTaille 
{
    padding-left: 10px;
    padding-right: 10px;
    text-align: right;
    vertical-align: middle;
}

Ce que je voudrais faire

Je souhaiterais faire cela en objet. Bien que ça n'a pas l'air des plus simples et des plus adapté ? J'ai donc fait deux classes, une classe dossier et une classe fichier.

>> App_Code/Dossier.cs

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
/// Classe Dossier
///     récupération du nom du dossier
///     récupération du chemin du dossier
public class Dossier : System.Web.UI.Page
{
 
    // Attributs
    private string nom;
    private string chemin;
 
    // Constructeurs
    public Dossier(String n, String c)
    {
        Initialise(n, c);
    }
    public Dossier(Dossier D)
    {
        Initialise(D);
    }
 
    // Méthodes d'initialisation
    public void Initialise(String n, String c)
    {
        this.nom = null;
        this.chemin = null;
    }
    public void Initialise(Dossier D)
    {
        this.nom = D.nom;
        this.chemin = D.chemin;
    }
 
    // Accesseurs et Modifieurs
    public object n { get; set; }
    public object c { get; set; }
 
    // Méthode
    public String Identifie()
    {
        String nom = this.n.ToString();
        String chemin = this.c.ToString();
        return nom + chemin;
    }
 
    // Méthode : Affichage du nom du dossier
    public String dossierAffichage()
    {
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        this.nom = Dossier.Name.ToString();
        return this.nom;
    }
 
    // Méthode : Affichage du chemin du dossier
    public String dossierChemin()
    {
        System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
        this.chemin = Dossier.FullName.ToString();
        return this.chemin;
    }
 
}
>> App_Code/Fichier.cs

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
/// Classe Fichier
///     récupération du nom du fichier
///     récupération de la date de dernière modification du fichier
///     récupération de la taille du fichier
public class Fichier : System.Web.UI.Page
{
 
    // Attributs
    private String nom;
    private String dateModification;
    private String taille;
 
    // Constructeurs
    public Fichier(String n, String dM, String t)
    {
        Initialise(n, dM, t);
    }
    public Fichier(Fichier F)
    {
        Initialise(F);
    }
 
    // Méthodes d'initialisation
    public void Initialise(String c, String dM, String t)
    {
        this.nom = null;
        this.dateModification = null;
        this.taille = null;
    }
    public void Initialise(Fichier F)
    {
        this.nom = F.nom;
        this.dateModification = F.dateModification;
        this.taille = F.taille;
    }
 
    // Accesseurs et Modifieurs
    public object n { get; set; }
    public object dM { get; set; }
    public object t { get; set; }
 
    // Méthode
    public String Identifie()
    {
        String nom = this.nom.ToString();
        String dateModification = this.dateModification.ToString();
        String taille = this.taille.ToString();
        return nom + dateModification + taille;
    }
 
}

Mon problème :

Arrivé à la classe Fichier.cs je me sens perdu. Je ne sais pas comment aller rechercher l'objet de mon dossier courant pour en extraire ma liste de fichier ? Celon mon raisonnement la classe Fichier devrait hériter de la classe Dossier afin de pouvoir créer un objet fichier avec les méthodes Dossier (nom,chemin).

Ma classe Dossier hérite dejà de System.Web.UI.Page, dans le cas contraire j'ai une erreur au niveau du Server.MapPath() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
System.IO.DirectoryInfo Dossier = new System.IO.DirectoryInfo(Server.MapPath("."));
Je ne peux donc pas faire hériter ma classe Fichier de la clase mère Dossier ET de System.Web.UI.Page ¿?


Suis-je sur la bonne voie ?
Avez-vous des conseils a me donner ?
Ou des suggestions ?

PS : Ma classe App_Code/Fichier.cs n'est pas terminée puisque je "bloque" un peu pour intégrer mes méthodes.


En vous remerciant d'avance pour le temps que vous m'aurez accordé à me lire.