【发布时间】:2011-10-15 13:16:48
【问题描述】:
我正在编写一个应用程序,仅当时间戳比现有时间戳更新时才会下载和替换 pdf 文件...
我知道可以通过下面的代码行读取本地计算机上文件的时间戳,
MessageBox.Show(File.GetCreationTime("C:\\test.pdf").ToString());
是否可以在不下载的情况下读取在线文件的时间戳..?
【问题讨论】:
我正在编写一个应用程序,仅当时间戳比现有时间戳更新时才会下载和替换 pdf 文件...
我知道可以通过下面的代码行读取本地计算机上文件的时间戳,
MessageBox.Show(File.GetCreationTime("C:\\test.pdf").ToString());
是否可以在不下载的情况下读取在线文件的时间戳..?
【问题讨论】:
除非站点上包含文件的目录配置为显示原始文件列表,否则无法通过 HTTP 获取文件的时间戳。即使是原始列表,您也需要自己解析 HTML 以获得时间戳。
如果您可以通过 FTP 访问这些文件,那么您可以这样做。如果仅使用 .NET Framework 中内置的基本 FTP 功能,您仍然需要解析目录列表以获取日期。但是,有第三方 FTP 库可以填补空白,例如 editFTPnet,您可以在其中获得 FTPFile class。
更新:
每条评论:
如果我要设置一个带有日期和文件名的简单 html 文件 手动编写的,我可以简单地阅读它来找出哪些文件 实际上已更新并仅下载所需的文件。是 这是一个可行的解决方案..
这将是一种方法,或者如果您有可用的脚本(ASP.NET、ASP、PHP、Perl 等),那么您可以自动执行此操作并让脚本获取文件的时间戳并将它们呈现给你。或者,您可以编写一个非常简单的 Web 服务,它返回一个 JSON 或 XML blob,其中包含文件的时间戳,这比一些 HTML 更容易解析。
【讨论】:
只有当网络服务器明确地向您提供该数据时才有可能。文件的创建日期是文件系统的一部分。但是,当您通过 HTTP 下载内容时,此时它不是文件系统的一部分。
HTTP 没有人们通常认为的“文件”的概念。相反,原本是“文件”的内容将作为响应数据传输,并带有提供有关数据的信息的响应标头。标头可以指定数据的类型(例如 PDF“文件”),甚至可以指定在客户端决定将数据保存为客户端本地文件系统上的文件时使用的默认名称。
但是,即使保存它,它也是客户端本地文件系统上的一个新文件。它不知道生成由 Web 服务器提供的数据的原始文件。
【讨论】: