我试图做到以下几点:
var path = Server.MapPath("File.js"));
// Create the file if it doesn't exist or if the application has been restarted
// and the file was created before the application restarted
if (!File.Exists(path) || ApplicationStartTime > File.GetLastWriteTimeUtc(path)) {
var script = "...";
using (var sw = File.CreateText(path)) {
sw.Write(script);
}
}
但是偶尔有时会抛出以下错误:
该进程无法访问该文件” ... \ File.js',因为它正由另一个进程使用
我在这里看着的不过雷似乎从别人略有不同的类似的问题。 此外,直到服务器负载过大,因此我想确保我上传之前修复它是正确的,我不能复制它。
我会很感激,如果有人可以告诉我怎么解决这个问题。
谢谢
这听起来像两个请求在同一时间在服务器上运行,而且他们都试图在同一时间写入该文件。
你会想在某种锁定行为的增加,或者写一个更强大的体系结构。 不知道更多有关具体是什么,你实际上是在试图用此文件写入程序来完成,我建议最好是锁定。 我通常不喜欢锁定这样的Web服务器上的粉丝,因为它使请求互相依赖,但是这将解决这个问题。
编辑 :德克指出下面这可能会或可能不会实际工作。 根据您的网络服务器配置,静态情况下可能无法共享,并可能出现相同的结果。 我提出这是一种概念证明,但你最应该解决的根本问题。
private static object lockObj = new object();
private void YourMethod()
{
var path = Server.MapPath("File.js"));
lock (lockObj)
{
// Create the file if it doesn't exist or if the application has been restarted
// and the file was created before the application restarted
if (!File.Exists(path) || ApplicationStartTime > File.GetLastWriteTimeUtc(path))
{
var script = "...";
using (var sw = File.CreateText(path))
{
sw.Write(script);
}
}
}
}
但是,再一次,我会忍不住重新考虑你实际上试图用此来完成。 也许你可以建立在这个文件Application_Start
方法,甚至只是一个静态构造函数。 这样做是为了每一个请求是一个混乱的方法,将有可能造成问题。 特别是在重负载,其中每个请求将被迫同步运行。
文章来源: The process cannot access the file because it is being used by another process