2016-08-24 83 views
2

我有一個帶有按鈕的web窗體。當你點擊那個按鈕時,它會創建一個文本文件並向它寫入內容。試想像我正在寫大量的東西1G內容,這將在一天內更改一次。這是一個asp.net應用程序,許多用戶將使用。假設第一次用戶在早上點擊6.o時鐘它將生成。現在我想爲其他人重新使用它,而不是創建一個新的,直到第二天早上6點clock.How做它。我正在張貼小原型代碼如何在ASP.net中一次執行一個方法

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

注:這是一個asp.net應用程序,以便想不出thread.So的我不打算

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

回答

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); 
} 
+0

日檢查需要'==',而不是'='。它也不能解決多個用戶點擊按鈕的問題。該文件將被多次生成。 –

1

假設你每天都在創建一個新文件,並且在一天結束時已經有了刪除邏輯。 在創建文件之前請檢查文件是否存在。

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

你也可以查看該文件的日期,如果你的參數之外,那麼刪除和(如果條件爲「存在」邏輯相同)創建一個新的。

+0

但它應該創建每天早上6點起凡press.I意味着它將在一天內改變一次 – peter

+0

@peter檢查我關於檢查文件日期的編輯 – Seano666

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"); 
      } 

     } 

    } 
} 
1

也許你應該嘗試使用應用程序變量來存儲文件已被寫入的最後時間(日期值),只是確保該文件只寫過每天一次。例如:

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

相關問題