C# 如何检查当月是否已生成文件
我正在运行一个windows服务,它每6小时运行一次并生成文件。对于某些文件,我希望每月只生成一次C# 如何检查当月是否已生成文件,c#,C#,我正在运行一个windows服务,它每6小时运行一次并生成文件。对于某些文件,我希望每月只生成一次 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
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小时运行一次时,它就不会一次又一次地生成文件。这个想法是基于将上一次文件生成的日期保存在磁盘上的某个位置,并检查新的月份是否已经开始 您可以尝试以下操作(必要的注释在代码中):
我使用Console应用程序只是为了举例,这也可以很容易地在WinForms中应用。定义“每月一次”。您是否希望将(不可编译的)
if(Convert.ToBoolean(firstOfMonth))
替换为if(DateTime.Now.Date==firstOfMonth)
?假设您知道文件路径,FileInfo
包含您需要的所有信息。它有一个CreationTime
属性,该属性将包含文件创建的日期/时间。只需检查它是否存在,然后检查FileInfo
@JayV,谢谢。我没有查看文件信息。
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);
}
}