如何强制删除文件? Windows服务器2008

时间:2010-03-12 13:43:03

标签: file-io windows-server-2008 web-hosting

在我的网站上,用户可以上传文件(图片,邮政编码,音频,视频等)。然后,他可能决定用更新版本替换它。这个用户可以上传一个文件,发帖然后决定换一个新版本替换旧文件(比如说它是一个大的zip或tar.gz文件)。如果他向家庭用户发送电子邮件甚至即时通讯,那么人们很可能会下载它。

问题。我需要更换文件,人们可能正在下载,可能需要几分钟才能删除。我不希望我的代码停止,直到我无法删除或检查每一秒是否未使用(特别是如果另一个用户可以启动,并且他需要很长时间创建一个循环)。

如何在用户下载文件时删除文件?我不在乎他们是否停止我只关心文件可以被替换,新的下载是新版本。

3 个答案:

答案 0 :(得分:4)

间接引用文件怎么样?

映射脚本,将您站点的虚拟文件条目映射到真实文件。如果用户想要上传他的文件的新版本,则只需更新映射,而不是真实文件。

您可以安装扫描所有文件的日常任务,并删除所有文件而不使用映射且没有打开的连接。

答案 1 :(得分:3)

lajuette的答案是对的,最简单的解决方案是完全解决文件锁定问题:

  1. 当用户上传文件 foo.zip 时,会在内部将其存储为 foo-v1.zip
  2. 在某处(数据库,代码,等等)创建映射文件,将 foo.zip 映射到 foo-v1.zip
  3. 不是公开文件的直接链接,而是公开指向获取文件的服务的链接: mysite.com/Download?foo.zip 等。此服务使用映射来确定要发送给客户端的文件版本。
  4. 上传新版本后,请创建 foo-v2.zip 并更新映射文件。
  5. 编写清理旧的未映射文件的计划任务并不难。

答案 2 :(得分:1)

如果您反对某个数据库,并且如果文件名是固定格式(例如user / id.ext),您可以使用修订号附加id并使用模式枚举该文件夹(user / id- *)并使用最新版本。