我正在运行一个每6小时运行一次的Windows服务并生成文件。对于某些文件,我想每月只生成一次。
var todaysDate = DateTime.Now.Date;
var firstOfMonth = new DateTime(todaysDate.Year, todaysDate.Month, 1);
var monthEnd = firstOfMonth.AddMonths(1).AddDays(-1);
var fileGenerated = false;
if (Convert.ToBoolean(firstOfMonth))
{
var fileToUploadOne = GenerateFileOne("sproc_name");
var fileToUploadTwo = GenerateFileTwo("sproc_name");
fileGenerated = true;
}
如何确保文件每月只生成一次。
更新:一旦月份意味着,每月生成一次文件,这样当服务每X小时运行一次时,它就不会一遍又一遍地生成文件。
答案 0 :(得分:0)
这个想法是基于在最后一个文件生成的磁盘日期保存某个地方并检查新月是否已经开始。
你可以试试这个(必要的评论在代码中):
class Program
{
// some safe location
private static var path = "";
static void Main(string[] args)
{
//get the saved tade
var saveDate = GetLastSavingDate();
var today = DateTime.Now;
//var todaysDate = DateTime.Now.Date;
//var firstOfMonth = new DateTime(todaysDate.Year, todaysDate.Month, 1);
//var monthEnd = firstOfMonth.AddMonths(1).AddDays(-1);
var fileGenerated = false;
// check if the difference in months exceeded 1 - this will be true on every 1st of new month, for example 8 - 7 or even 1 - 12
if(Math.Abs(today.Month - saveDate.Month) >= 1)
{
var filetouploadone = generatefileone("sproc_name");
var filetouploadtwo = generatefiletwo("sproc_name");
filegenerated = true;
// save date
File.WriteAllText(path, JsonConvert.SerializeObject(today));
}
}
//method to get saved date
private static DateTime GetLastSavingDate()
{
var dt = new DateTime();
return JsonConvert.DeserializeAnonymousType(File.ReadAllText(path), dt);
}
}
我仅仅为了示例而使用了控制台应用程序,这也可以在WinForms中轻松应用。