C# 运行调度程序两次会使用控制台应用程序C中的早期文件更新该文件#

C# 运行调度程序两次会使用控制台应用程序C中的早期文件更新该文件#,c#,excel,console-application,C#,Excel,Console Application,我有一个要求,我的调度程序将在一天内运行两次。早上一次,晚上第二次。当我运行当前代码时,它将文件存储在一个文件夹中 所以,当我晚上运行同一个应用程序时,发生的是早上保存的同一个文件再次更新,这是我不希望发生的。我想保存这两个文件。那我该怎么办 下面是我当前的代码。请给我一些建议 public void ExportExcel(string strWorkbookName, DataSet ds) { string strDateFolder = "";

我有一个要求,我的调度程序将在一天内运行两次。早上一次,晚上第二次。当我运行当前代码时,它将文件存储在一个文件夹中

所以,当我晚上运行同一个应用程序时,发生的是早上保存的同一个文件再次更新,这是我不希望发生的。我想保存这两个文件。那我该怎么办

下面是我当前的代码。请给我一些建议

public void ExportExcel(string strWorkbookName, DataSet ds)
    {   
        string strDateFolder = "";
        string strFileName = ConfigurationManager.AppSettings["FileName"].ToString();

        try
        {
            using (XLWorkbook wb = new XLWorkbook())
            {
                strDateFolder = DateTime.Now.ToString("dd-MM-yyyy");

                if (Directory.Exists(strDateFolder))
                {
                    Directory.CreateDirectory(strDateFolder);
                }

                wb.Worksheets.Add(ds);
                wb.SaveAs(ConfigurationRead.GetAppSetting("ReportDirectory") + "\\" + strDateFolder + "\\" + strFileName);
            }
        }
        catch (Exception)
        {
            throw;
        }
    }
更新


另外,我想删除7天后创建的文件夹。这也可能吗?

strDateFolder将在两次运行中包含相同的值,因为它获取日期。您可能希望为其添加时间,以便它创建另一个文件。像这样:

strDateFolder = DateTime.Now.ToString("dd-MM-yyyy-hh");
然后,下面的代码就像在说:如果这个目录存在,就创建它

if (Directory.Exists(strDateFolder))
{
     Directory.CreateDirectory(strDateFolder);
}
您只能使用它,因为只有当它不存在时,它才会创建它:

Directory.CreateDirectory(strDateFolder);
从帖子更新: 这将删除6天以前的文件夹

CultureInfo enUS = new CultureInfo("en-US");
string path = ConfigurationRead.GetAppSetting("ReportDirectory");
DateTime currentDate = DateTime.Now.AddDays(-7);
foreach (string s in Directory.GetDirectories(path))
{
     string folderPath = s.Remove(0, path.Length);
     if (DateTime.TryParseExact(folderPath, "dd-MM-yyyy hhmmss", enUS, DateTimeStyles.AssumeLocal, out DateTime td))
     {
          if (td <= currentDate)
          {
               Directory.Delete(s, true);
          }
     }
}
CultureInfo enUS=新的CultureInfo(“en-US”);
字符串路径=ConfigurationRead.GetAppSetting(“ReportDirectory”);
DateTime currentDate=DateTime.Now.AddDays(-7);
foreach(Directory.GetDirectories(path)中的字符串s)
{
字符串folderPath=s.Remove(0,path.Length);
if(DateTime.TryParseExact(folderPath,“dd-MM-yyy-hhmmss”,enUS,datetimestyle.AssumeLocal,out-DateTime-td))
{

if(tdstrDateFolder将在两次运行中包含相同的值,因为它获取日期。您可能希望在其中添加时间,以便它创建另一个文件。如下所示:

strDateFolder = DateTime.Now.ToString("dd-MM-yyyy-hh");
然后,下面的代码就像在说:如果这个目录存在,就创建它

if (Directory.Exists(strDateFolder))
{
     Directory.CreateDirectory(strDateFolder);
}
您只能使用它,因为只有当它不存在时,它才会创建它:

Directory.CreateDirectory(strDateFolder);
从帖子更新: 这将删除6天以前的文件夹

CultureInfo enUS = new CultureInfo("en-US");
string path = ConfigurationRead.GetAppSetting("ReportDirectory");
DateTime currentDate = DateTime.Now.AddDays(-7);
foreach (string s in Directory.GetDirectories(path))
{
     string folderPath = s.Remove(0, path.Length);
     if (DateTime.TryParseExact(folderPath, "dd-MM-yyyy hhmmss", enUS, DateTimeStyles.AssumeLocal, out DateTime td))
     {
          if (td <= currentDate)
          {
               Directory.Delete(s, true);
          }
     }
}
CultureInfo enUS=新的CultureInfo(“en-US”);
字符串路径=ConfigurationRead.GetAppSetting(“ReportDirectory”);
DateTime currentDate=DateTime.Now.AddDays(-7);
foreach(Directory.GetDirectories(path)中的字符串s)
{
字符串folderPath=s.Remove(0,path.Length);
if(DateTime.TryParseExact(folderPath,“dd-MM-yyy-hhmmss”,enUS,datetimestyle.AssumeLocal,out-DateTime-td))
{


如果(td),那么您晚上的文件将覆盖早上的文件,因为它们使用相同的
dd-MM-yyyy
文件夹名和
AppSettings[“filename”]中的相同文件名
?我遗漏了什么,是因为这似乎是一个相当简单的问题吗?@Trevor:是的,你说的没错,事情就是这样发生的。有什么解决办法吗this@BNN是的。例如,您可以在文件名中添加时间戳。@BNN您可以添加时间戳(例如24小时格式的小时)文件夹名或文件名或两者都有。这取决于您正在创建的这些文件的用途。我们没有足够的信息来回答您的问题。@FLeX您想写这个吗?因此,您晚上的文件将覆盖早上的文件,因为它们使用相同的
dd-MM-yyyy
文件夹名还有来自
AppSettings[“filename”]
的同一个文件名?我是否因为这似乎是一个非常简单的问题而遗漏了什么?特雷弗:是的,你说的没错,事情就是这样发生的。有什么解决办法吗this@BNN是的。例如,您可以在文件名中添加时间戳。@bn您可以添加时间戳(例如24小时格式的一天中的小时)文件夹名或文件名,或两者都有。这取决于您正在创建的这些文件的用途。我们没有足够的信息来回答您的问题。@FLeX您想写这个吗?没有您的逻辑。请解释一下。在哪里添加以及如何实现更新的答案。在
out DateTime t获取错误d
as
system.datetime是一种类型,但用作变量
@BNN尝试将
out datetime td
更改为
out td
@FLeX:getting error,因为
system.datetime.parseexact的最佳重载方法匹配有一些无效参数
没有您的逻辑。请解释一点。添加到哪里以及如何实现更新ed回答。在
out DateTime td
as
system.DateTime是一种类型,但用作变量
@BNN尝试将
out DateTime td
更改为
out td
@FLeX:get error as
作为system.DateTime.parseexact的最佳重载方法匹配有一些无效参数