我需要列出内容文件夹中文件的所有相对路径。
我写了一些有用的东西,但看起来有点脆弱。有没有更好/更聪明的方法来做到这一点?
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[]
。这样做的好处是显而易见的。在内部,此方法使用 FindFirstFile和 FindNextFile Win32 函数。这意味着仅当您开始枚举结果集时才会执行实际的文件系统搜索。
关于asp.net - 获取 ASP.NET MVC 中 Content 文件夹中文件的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9489392/