Невозможно отобразить содержимое файла или каталога на странице ASP.NET с помощью общего диска - PullRequest
0 голосов
/ 28 октября 2011

В этом вопросе я использую Visual Studio 2008. Мой код довольно прост, так как он использовался по ссылке, которую я взял в Интернете. Я использую ASP / VB.Net, IIS6.0 на Windows Server 2003 box.

Я просмотрел различные источники в Интернете и не смог собрать правильный результат.

Цель этого состоит в том, чтобы перечислить множество каталогов и их соответствующих файлов, и позволить пользователю в конечном итоге управлять этим каталогом (например, открывать и удалять файлы).

Вот моя страница ASPX:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="DirectoryList.aspx.vb" Inherits="VCMReports.DirectoryList" %>

<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DataGrid runat="server" id="articleList" Font-Name="Verdana"
    AutoGenerateColumns="False" AlternatingItemStyle-BackColor="#eeeeee"
    HeaderStyle-BackColor="Navy" HeaderStyle-ForeColor="White"
    HeaderStyle-Font-Size="15pt" HeaderStyle-Font-Bold="True">
  <Columns>
    <asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name" 
           HeaderText="File Name" />
    <asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time"
        ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
    <asp:BoundColumn DataField="Length" HeaderText="File Size"
        ItemStyle-HorizontalAlign="Right" 
        DataFormatString="{0:#,### bytes}" />
  </Columns>
</asp:DataGrid>  

    </div>
    </form>
</body>
</html>

А вот код позади:

Imports System.IO
Imports System.IO.DirectoryInfo

Partial Public Class DirectoryList
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim dirInfo As New DirectoryInfo(Server.MapPath("V:\Users\"))

        articleList.DataSource = dirInfo.GetFiles("V:\Users\")
        articleList.DataBind()

    End Sub
    Protected Sub GetFiles()

        Dim files() As String = Directory.GetFiles("V:\Users\")

        Dim myDir As DirectoryInfo = New DirectoryInfo("V:\Users\")
        Dim fileInfos() As IO.FileInfo = myDir.GetFiles("*.*")
    End Sub

При запуске страницы появляется следующая ошибка:

'V:\Users\' is not a valid virtual path. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: 'V:\Users\' is not a valid virtual path.

Вещи, которые я пробовал:

  1. На сервере я назначил диск и каталог.
  2. Разрешения, похоже, установлены правильно, олицетворение верно.
  3. Если бы я перечислял каталог в фактическом каталоге "C: \ Inetpub \ Directory \", сбоя не было бы.
  4. Я понимаю, что это неполно для части списка Справочника, это будет только список файлов (так что это нужно будет изменить.
  5. Я попытался создать виртуальный каталог, и приложение выдало ту же ошибку.
  6. На моей локальной машине для разработки создан тот же путь - та же ошибка.

Как я могу просматривать содержимое общего каталога и его файлов?

1 Ответ

2 голосов
/ 28 октября 2011

Здесь вы найдете ответ на первую часть вопроса, почему Server.MapPath не может (и не должен) использоваться для определения пути к сетевому ресурсу: http://forums.asp.net/t/785846.aspx/1

Второй вопрос, упомянутый в вашем комментарии, состоит в том, как составить список всех каталогов в каталоге:

myDir.GetDirectories()

http://msdn.microsoft.com/en-us/library/s7xk2b58.aspx

...