如何在ASP.NET Core MVC中获取文件的最后修改日期?

时间:2016-03-31 07:04:09

标签: c# asp.net-core-mvc

我将一个小型MVC 5网站移植到MVC 6,以发现重大变化。东西正在破碎。

MVC 5代码使用@File.GetLastWriteTime(this.Server.MapPath(this.VirtualPath))来获取时间戳,如建议的here。显然在MVC 6中,.cshtml页面不再有ServerVirtualPath个成员。什么是新咒语?

4 个答案:

答案 0 :(得分:3)

18个月后重新审视我自己的问题......框架现在是ASP.NET Core 2.0 MVC,似乎框架,文档和最佳实践都有所改变。

您应该使用MS docs中所述的FileProvider。在这里重新创建这篇文章毫无意义,但请务必:

  • 将IHostingEnvironment添加到Startup 构造函数参数中,并将其保存在本地变量中,如文档中所述
  • 在Startup.ConfigureServices()中,调用services.AddSingleton(HostingEnvironment.ContentRootFileProvider);注册IFileProvider服务,也在文档中描述
  • 将IFileProvider添加到控制器的构造函数参数中,并将其保存在本地变量中

然后实际获得最后修改日期,控制器将如下所示:

public class HomeController : Controller
{
    private IFileProvider _fileProvider;

    public HomeController(IFileProvider fileProvider)
    {
        _fileProvider = fileProvider;
    }

    public IActionResult Index()
    {
        DateTimeOffset lastModifiedDate = _fileProvider.GetFileInfo(@"Views\Home\Index.cshtml").LastModified;
        // use it wisely...
        return View();
    }

答案 1 :(得分:0)

您可以从ApplicationBasePath服务获得IApplicationEnvironment

private readonly IApplicationEnvironment _env;

public FileController(IApplicationEnvironment appEnv)
{
    _env= appEnv;
}

public IActionResult Index()
{
    var myModel = _env.ApplicationBasePath;
    return View(myModel);
}

然后你可以像这样进行自己的路径计算:

    public IActionResult Index()
    {
        var myFileVirtualPath = "/ab/c.d"
        var myModel = Path.Combine(_env.ApplicationBasePath, myFileVirtualPath);
        return View(myModel);
    }

答案 2 :(得分:0)

@PaulWilliam举动的替代解决方案

如果出于某种原因无法使用文件提供程序,则可以使用System.IO.File静态类及其方法GetLastWriteTimeGetLastWriteTimeUtc来获取文件的上次修改日期。返回DateTime obj:

DateTime lastModified = System.IO.File.GetLastWriteTimeUtc(filePath);

请注意,非utc方法GetLastWriteTime返回基于服务器/文件系统时间的上次修改日期。

除此之外,System.IO.File还包含所有有助于检索数据(如上次访问时间,创建时间等)的方法。不仅是getter方法,还有setter方法。

文档:File Class - MS Docs


还值得指出的是,您可以使用GetAttributes / SetAttributes方法来处理FileAttributes枚举,这些枚举用于将文件状态定义为Hidden,{{ 1}}等。

文档:File.GetAttributes(String) Method - MS DocsFileAttributes Enum - MS Docs

答案 3 :(得分:-2)

@(新的System.IO.FileInfo(新的Microsoft.Extensions.FileProviders.PhysicalFileProvider(Environment.CurrentDirectory).GetFileInfo(this.Path).PhysicalPath).CreationTime)