2

私は、フォルダーを再帰的に通過し、それらのファイルとサブフォルダーをリストするasp.netファイルブラウザーに取り組んでいます。ただし、ファイルをダウンロード/表示できるようにしたいのですが、問題があるようです。アドレス変換を正しく取得できません。次の構成とコードがあります。

編集

問題は、作成されるリンクが

Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");

ファイルに正しくリンクしないでください。また、解決しなければならないおまけの問題があります。ファイル名の一部にスペースが含まれています。

Web.config

<appSettings>
  <add key="UploadDirectory" value="~/Upload/"/>
</appSettings>

FileBrowser.aspx.cs

public partial class FileBrowser : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {        
        DirectoryInfo di = new DirectoryInfo(Request.MapPath(System.Configuration.ConfigurationManager.AppSettings["UploadDirectory"]));
        if (Directory.Exists(di.ToString()))
            printDir("", di.ToString());

    }

    protected void printDir(string space, string dir)
    {
        DirectoryInfo di = new DirectoryInfo(dir);
        foreach (DirectoryInfo d in di.GetDirectories())
        {
            Response.Write(space + "<a href=" + d.ToString() + ">" + d.ToString() + "</a><br/>");
            printDir(space + "&nbsp;&nbsp;&nbsp;&nbsp;", dir + "\\" + d.ToString());
        }

        foreach (FileInfo d in di.GetFiles())
        {
            Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");
        }
    }
}
4

3 に答える 3

1

このようなことを試しましたか?

foreach (FileInfo d in di.GetFiles())
{
    Response.Write(space + "<a href=" + Server.MapPath("~/Upload/") + d.Name + ">" + d.FullName + "</a><br/>");
}
于 2011-06-20T11:22:27.353 に答える
1

問題は、サブフォルダー内のファイルのパスをレンダリングするときに、「アップロード/ファイル名」のようなパスを使用していることです。これは正しくありません。

実際、現在の di 変数からディレクトリ名を取得するようにしてください。つまり、現在「アップロード」フォルダー内の「内部」フォルダーを参照している場合、パスは「アップロード/内部/ファイル名」のようになります。

これは、変更を加える必要がある場所です。

  Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");

上記のコード行では、di 変数のパスに応じて動的に href URL を作成する必要があります。以下をせよ:

  1. パスを取得する
  2. di パスの「\Upload」の後の部分文字列を取得します
  3. 上記の部分文字列を「\」で分割します。これにより、サブディレクトリが表示されます。
  4. 上記のサブディレクトリを使用して、ファイルへの新しいパスを作成します。

これが役立つことを願っています。

于 2011-06-20T12:06:08.040 に答える
1

これははるかに読みやすいです:

foreach (FileInfo d in di.GetFiles("*", SearchOption.AllDirectories)) // includes subfolders
{
    Response.Write(String.Format("{0}<a href=\"{1}\">{2}</a>", space, Server.MapPath("~/Upload/") + d.Name, d.FullName);
}

また、試してみてくださいDirectoryInfo.EnumerateFile()

于 2011-06-20T12:09:11.567 に答える