C# 如何检查当月是否已生成文件

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

我正在运行一个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.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);
    }
}