我有一个带有按钮的网页表单。当你点击那个按钮时,它会创建一个文本文件并写一些东西。就像我正在写大量的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
}
答案 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