【问题标题】:How to get a file's last modified date in ASP.NET Core MVC?如何在 ASP.NET Core MVC 中获取文件的最后修改日期?
【发布时间】:2019-05-06 21:22:33
【问题描述】:

我正在将一个小型 MVC 5 网站移植到 MVC 6 以发现重大更改。东西坏了。

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

【问题讨论】:

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


    【解决方案1】:

    18 个月后重新审视我自己的问题...框架现在是 ASP.NET Core 2.0 MVC,框架、文档和最佳实践似乎发生了一些变化。

    您应该使用 MS docs 中描述的 FileProvider。在此处重新创建该文章没有任何意义,但请务必:

    • 将 IHostingEnvironment 添加到 Startup constructor 参数,并将其保存在局部变量中,如文档中所述
    • 在 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();
        }
    

    【讨论】:

      【解决方案2】:

      您可以从IApplicationEnvironment 服务获取ApplicationBasePath

      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);
          }
      

      【讨论】:

        【解决方案3】:

        @PaulWilliam's asnwer 的替代解决方案

        如果您因任何原因无法使用文件提供程序,则可以使用System.IO.File 静态类及其方法GetLastWriteTimeGetLastWriteTimeUtc 来获取文件的最后修改日期,该方法返回DateTime对象:

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

        请注意,非 UTC 方法 GetLastWriteTime 根据服务器/文件系统时间返回最后修改日期。

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

        文档:File Class - MS Docs


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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-26
            • 1970-01-01
            • 2012-08-07
            • 2012-07-07
            • 2011-05-20
            • 1970-01-01
            • 2010-09-17
            相关资源
            最近更新 更多