如何在ASP.net中执行一次方法

时间:2016-08-24 15:32:37

标签: c# asp.net .net

我有一个带有按钮的网页表单。当你点击那个按钮时,它会创建一个文本文件并写一些东西。就像我正在写大量的1G内容,它会在一天内改变一次。这是一个asp.net应用程序,许多用户将使用。所以假设第一个用户点击早上6.o时钟它将生成。现在我想为其他人重新使用它而不是创建一个新的直到第二天早上6点钟。如何这样做。我发布了一个小原型代码

try
{
     File.WriteAllText("E:\\test.txt", "welcome");
}
catch (Exception ex)
{
      Response.Write(ex.Message);
}

注意:这是一个asp.net应用程序,因此无法想到线程。所以我不在想

While(true)
{
   Thread.Sleep()  etc
}

4 个答案:

答案 0 :(得分:2)

使用 File.GetLastWriteTime 方法检查文件中的最后修改

try
{
   if(!File.Exists("E:\\test.txt") )
   {
     File.WriteAllText("E:\\test.txt", "welcome");     
   } 
   else
   { 
       if(File.GetLastWriteTime(path).Day != DateTime.Now.Day)   
       {
         //code for next day
       }  
   }

}
catch (Exception ex)
{
  Response.Write(ex.Message);
}

答案 1 :(得分:1)

假设您每天都在创建一个新文件,并且在一天结束时已经有了删除逻辑。 在创建文件之前检查文件是否存在。

try
        {
            if (//file does not exist)
               File.WriteAllText("E:\\test.txt", "welcome");
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

您还可以检查文件的日期,如果在参数之外,则删除并创建一个新的(与'存在'逻辑相同的条件)。

答案 2 :(得分:1)

这应该可以防止两个或多个线程两次写入同一个文件。

获取锁的第一个线程将创建该文件,然后其他线程将跳过创建该文件,并对锁内的文件进行第二次检查。

public static object fileLock = new object();

public void createFile()
{

    if (File.Exists("filepath") == false) {

        lock (fileLock) {

            if (File.Exists("filepath") == false) {
                  File.WriteAllText("E:\\test.txt", "welcome");
            }

        }

    }
}

答案 3 :(得分:1)

也许您应该尝试使用Application变量来存储上次写入文件的时间(日期值),并确保该文件每天只写一次。例如:

Dim dt as DateTime
If TryCast(Application("LastFileWrite"), dt) Then
    If String.Compare(dt.Date.ToString(), Now.Date.ToString()) <> 0 Then
        ' we're a different day today, go ahead and write file here
    End If
Else
    ' we've never writting this application variable, this is
    ' the first run, go ahead and write file here as well
End If

有关“应用程序”状态的更多信息,请查看以下文档:

https://msdn.microsoft.com/en-us/library/bf9xhdz4(v=vs.71).aspx