【发布时间】:2009-04-23 05:11:12
【问题描述】:
我们正在替换使用基于文件的缓存来提供下载的“旧”网络应用程序(最初的 CodeCentral 是 10 多年前编写的,现在在 http://cc.embarcadero.com 运行,提供了超过 1270 万次服务)。 Web 应用程序管理此文件缓存。
使用基于文件的下载唯一复杂的一点是更新可能被另一个版本使用的文件。当我编写 CodeCentral 的原始 Delphi CGI 版本时,我隐约记得能够重命名现有文件,即使有人可能正在下载它,用正确的名称编写新文件,并最终清理旧文件。
但是,我可能会产生错觉,因为这不适用于我们当前的 IIS 6 和 ASP.NET 2.x 或 3.x 代码。所以,我们所做的是这个,虽然很笨拙,但最终会奏效:
public static void FileCreate(Stream AStream, string AFileName, int AWaitInterval)
{
DateTime until = DateTime.Now.AddSeconds(AWaitInterval);
bool written = false;
while (!written && (until > DateTime.Now))
{
try
{
using (FileStream fs = new FileStream(AFileName, FileMode.Create))
{
CopyStream(AStream, fs);
written = true;
}
}
catch (IOException)
{
Thread.Sleep(500);
}
}
}
我认为我们缺少一些简单的东西,必须有更好的方法来替换当前通过 IIS 和 ASP.NET 下载的文件。有吗?
【问题讨论】: