asp.net - 获取 ASP.NET MVC 中 Content 文件夹中文件的所有路径

标签 asp.net asp.net-mvc asp.net-mvc-3

我需要列出内容文件夹中文件的所有相对路径。

我写了一些有用的东西,但看起来有点脆弱。有没有更好/更聪明的方法来做到这一点?

var contentPaths = GetRelativePathsToRoot("~/Content/").ToList();

private IEnumerable<string> GetRelativePathsToRoot(string virtualPath)
    {
        var physicalPath = Server.MapPath(virtualPath);
        var absolutePaths = Directory.GetFiles(physicalPath, "*.*", SearchOption.AllDirectories);                       

        var relativePaths = new List<string>();
        foreach (var absolutePath in absolutePaths)
        {                
            var splittedPath = virtualPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);               
            var virtualFolderName = splittedPath[splittedPath.Length -1];
            var relativePath = absolutePath
                .Substring(absolutePath.IndexOf(virtualFolderName))
                .Replace("\\", "/");                

            relativePaths.Add(Url.Content("~/" + relativePath));
        }

        return relativePaths;
    }

最佳答案

以下内容似乎更短:

private IEnumerable<string> GetRelativePathsToRoot(string virtualPath)
{
    var physicalPath = Server.MapPath(virtualPath);
    var absolutePaths = Directory.EnumerateFiles(
        physicalPath, 
        "*.*", 
        SearchOption.AllDirectories
    );
    return absolutePaths.Select(
        x => Url.Content(virtualPath + x.Replace(physicalPath, ""))
    );
}

另请注意,我正在使用 Directory.EnumerateFiles 而不是Directory.GetFiles 。此方法是在 .NET 4.0 中引入的,并返回 IEnumreable<string>而不是string[] 。这样做的好处是显而易见的。在内部,此方法使用 FindFirstFileFindNextFile Win32 函数。这意味着仅当您开始枚举结果集时才会执行实际的文件系统搜索。

关于asp.net - 获取 ASP.NET MVC 中 Content 文件夹中文件的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9489392/

相关文章:

asp.net - MVC3 中返回文件的操作

asp.net - 从另一个 Controller 获取带有参数的 returnUrl

mysql - EF5 :could not be created because the principal key columns could not be determined. 使用 AddForeignKey 流畅 API 完全指定外键

jquery - 为什么 ('#formId' ).trigger ('submit' ) 会导致我的表单多次发布,而 ('formId' ).trigger ('submit' ) 不会?

asp.net - 您可以在 IIS 中运行 asp.net core 3.0 gRPC CLIENT 吗? (可能在 Azure 上?)

c# - 当部分 View 与父 View 共享模型时 HtmlHelper 的奇怪行为

c# - MVC Entity Framework 中的种子方法

javascript - Asp.net Mvc使用ajax上传多个文件出现一些错误

javascript - ASP.NET MVC/JavaScript - 从 C# amp 解码编码的 HTML 字符串

asp.net-mvc-3 - PDT 能否在 IPN 之前触发或如何同步 IPN 和 PDT?