Проблема с перечислением каждого файла в папке решения в ASP .NET Core - PullRequest
0 голосов
/ 23 июня 2019

Я хотел бы перечислить имена файлов (в данном случае статьи) в неупорядоченном списке, но у меня возникают проблемы с получением абсолютного пути к файлам. Как получить надежное и совместимое со стандартами решение для перечисления имен файлов решений в ASP .NET Core?

Я попытался вызвать Directory.EnumerateFiles (с и без ~ в параметре пути к каталогу)

Я также пытался использовать GetFiles, получая аналогичные результаты при ошибке пути.

Мой код следующий:

<p>
    <ul>
    @foreach (string articulo in Directory.EnumerateFiles("~/Views/Articulo"))
    {
        <li>
            <a asp-controller="Articulo" asp-action="@articulo">@articulo</a>
        </li>
    }
    </ul>
</p>

На данный момент DOM для решения выглядит следующим образом:

-Root Application

  -Views
    -Articulo
      -Todo.cshtml //Only page in the folder

Я бы ожидал, что при попытке установить правильные теги привязки возникнут некоторые ошибки, но вместо этого я получу ошибку пути:


'Directory.EnumerateFiles("~/Views/Articulo")' threw an exception of type 'System.IO.DirectoryNotFoundException'
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2147024893
    HelpLink: null
    InnerException: null
    Message: "Could not find a part of the path 'C:\\Users\\MyUser\\Documents\\Source\\Repos\\MyRepo\\MySolution\\~\\Views\\Articulo'."
    Source: "System.IO.FileSystem"
    StackTrace: "   at System.IO.Enumeration.FileSystemEnumerator`1.CreateDirectoryHandle(String path, Boolean ignoreNotFound)\r\n   at System.IO.Enumeration.FileSystemEnumerator`1..ctor(String directory, EnumerationOptions options)\r\n   at System.IO.Enumeration.FileSystemEnumerable`1..ctor(String directory, FindTransform transform, EnumerationOptions options)\r\n   at System.IO.Enumeration.FileSystemEnumerableFactory.UserFiles(String directory, String expression, EnumerationOptions options)\r\n   at System.IO.Directory.InternalEnumeratePaths(String path, String searchPattern, SearchTarget searchTarget, EnumerationOptions options)\r\n   at System.IO.Directory.EnumerateFiles(String path)"
    TargetSite: {IntPtr CreateDirectoryHandle(System.String, Boolean)}

1 Ответ

0 голосов
/ 24 июня 2019

EnumerateFiles("~/Views/Articulo") не расширит ~.Вам нужно получить реальный путь вручную:

@using System.IO
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment env

<ul>
@{
    var dir = System.IO.Path.Combine(env.ContentRootPath,"Views/Articulo");
}
@if(System.IO.Directory.Exists(dir))
{
    @foreach (string articulo in Directory.EnumerateFiles(dir))
    {
        <li>
            <a asp-controller="Articulo" asp-action="@articulo">@articulo</a>
        </li>
    }
}else{
    <span>"No Files"</span>
}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...