2013-06-27 60 views
1

我是C#的新手(少於一週),我有以下代碼刪除捲上的文件。它是SQL數據庫的備份文件。而且它會不斷增長,因此需要定期重命名文件,然後在備份新文件後將其刪除。我需要評估是否運行了備份,然後刪除文件即可。if語句來評估多個文件日期

using System; 
using System.IO; 

class Program 
{ 
    static void Main() 
    { 
     // 
     // Delete a file found on the D:\ volume. 
     // If the file is not found (File doesn't exist), 
     // then you will get an exception. 
     // 
     try 
     { 
      File.Delete(@"\\Fabtrol-2\Program Files (x86)\FabTrolBackUp\FT_Trans_Log_Appendedold.BAK"); // Try to delete 
      Console.WriteLine("Deleted"); // Success 
     } 
     catch (IOException ex) 
     { 
      Console.WriteLine(ex); // Write error 
     } 
    } 
} 

這是邏輯。如果我要求的太多了,讓我知道:

  • 如果今天的日期是表示星期一和文件FT_FabTrol_Sun_Full.BAK的日舊少於2天,然後它是好的刪除名爲FT_Trans_Log_Appendedold.BAK
  • 文件
  • 否則如果今天的日期是週二=和文件FT_FabTrol_Mon_Full.BAK的日舊少於2天,然後它是好的刪除名爲FT_Trans_Log_Appendedold.BAK
  • 否則文件如果今天的日期是週三=和文件FT_FabTrol_Tues_Full.BAK的日期小於2天,那麼刪除名爲FT_Trans_Log_Appendedold.BAK的文件是可以的
  • 否則如果今天da te is = Thursday並且文件FT_FabTrol_Wed_Full.BAK的日期小於2天,那麼可以刪除名爲FT_Trans_Log_Appendedold.BAK的文件
  • 否則如果今天的日期是=星期五,並且文件FT_FabTrol_Thurs_Full.BAK的日期較少然後2天,那麼刪除名爲FT_Trans_Log_Appendedold.BAK
  • Else如果今天的日期是=星期六和文件FT_FabTrol_Fri_Full.BAK的日期小於2天,那麼可以刪除名爲FT_Trans_Log_Appendedold的文件.BAK
  • 否則,如果今天的日期是=星期日和文件FT_FabTrol_Sat_Full.BAK的日舊少於2天,然後它是好的刪除名爲FT_Trans_Log_Appendedold.BAK
文件
+2

FileInfo類可以幫助您獲取有關創建/修改日期的信息。 http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx – Gray

+2

也許你想刪除超過兩天的文件,並保留更新的文件? – Steve

+3

你可以跳過所有這些'ifs'。如果文件不超過2天,請刪除它。那是對的嗎? –

回答

0

此代碼第一次檢查,如果根據當天的文件不到2天,然後如果是刪除文件FT_Trans_Log_Appendedold.BAK。

   string dir = @"\\Fabtrol-2\Program Files (x86)\FabTrolBackUp\"; 
       string fileName = dir; 
       switch (DateTime.Now.DayOfWeek) 
       { 
        case DayOfWeek.Monday: 
         fileName += "FT_FabTrol_Sun_Full.BAK"; 
         break; 
        case DayOfWeek.Tuesday: 
         fileName += "FT_FabTrol_Mon_Full.BAK"; 
         break; 
        case DayOfWeek.Wednesday: 
         fileName += "FT_FabTrol_Tues_Full.BAK"; 
         break; 
        case DayOfWeek.Thursday: 
         fileName += "FT_FabTrol_Wed_Full.BAK"; 
         break; 
        case DayOfWeek.Friday: 
         fileName += "FT_FabTrol_Thurs_Full.BAK"; 
         break; 
        case DayOfWeek.Saturday: 
         fileName += "FT_FabTrol_Fri_Full.BAK"; 
         break; 
        case DayOfWeek.Sunday: 
         fileName += "FT_FabTrol_Sat_Full.BAK"; 
         break; 
       } 

       FileInfo fi = new FileInfo(fileName); 
       if (fi.Exists && DateTime.Now.AddDays(-2) > fi.LastWriteTime.Date) 
       { 
        (new FileInfo(dir + "FT_Trans_Log_Appendedold.BAK")).Delete(); 
        Console.WriteLine("Deleted"); 
       } 
+1

這並不比OP已經有的更好 – dtsg

+0

它在C#中寫的是用文字寫的。我明白這個問題是問如何寫他的if語句到C#中。我不認爲這個問題是關於如何測試它是否是2天的問題。 –

+0

把它放在代碼的try塊中。 –

0

個人爲一個星期的經驗,我會說你已經跳入深層。

我不打算提供的代碼,而你直接提高你的學習,這被稱爲psuedo code

  1. 查找到streamwriter /讀卡器的FileWriter和FileInfo的。
  2. 從這裏你可以讀取文件,刪除/重命名/任何你想要的東西。
  3. 然後您需要嘗試並瞭解我怎麼能驗證我在做什麼。 不幸的是,對於初學者來說,這比你想象的要難,對於某些人來說可能比前兩點更難。從簡單的角度來看,我們的開發人員通常會把事情複雜化。這部分其實很容易,只要你的文件是正確的!

你可能想看看單元測試,因爲這可能有助於你的驗證。

3

可以大大簡化邏輯與: -

FileInfo info = new FileInfo(@"\\Fabtrol-2\Program Files (x86)\FabTrolBackUp\FT_Trans_Log_Appendedold.BAK"); 
if(DateTime.Now.AddDays(-2) > info.LastWriteTime.Date) 
{ 
    //Delete 
} 
0

建立在什麼@Gray評論,FileInfo對象也將讓你知道,如果它.Exists與否,減輕需要依賴於試/趕上知道如果一個文件仍然存在。

考慮以下幾點:

static void Main() 
{ 
    FileInfo fi = new FileInfo(@"\\path\\to\\file.bak"); 

    if(fi.Exists) 
    { 
     try 
     { 
      //because we can still get errors based on permissions etc. 
      fi.Delete(); 
      Console.WriteLine("Deleted"); // Success 
     } 
     catch (IOException ex) 
     { 
      Console.WriteLine(ex); // Write error 
     } 
    } 
} 
1

所有你需要做的是遍歷文件夾中的所有文件,並刪除早於兩天的,正確的(這似乎是你的巨人條件聲明歸結爲)?

因此,使用以下行來獲得該文件夾中的所有文件:

string[] files = Directory.GetFiles(<folder name>); 

然後,在一個循環中,遍歷所有的文件名中files和檢查,它們是否足夠大。

要獲取文件的時間戳,使用FileInfoLastWriteTime這樣的:下面的代碼

if(DateTime.Today - someFileInfoObject.LastWriteTime.Date > new TimeSpan(2,0,0,0)) 
{ 
    File.Delete(); 
} 
0

嘗試。

string backupFile = @"\\Fabtrol-2\Program Files (x86)\FabTrolBackUp\FT_Trans_Log_Appendedold.BAK"; 
FileInfo fi = new FileInfo(backupFile); 
DateTime fileCreatedDate = File.GetCreationTime(backupFile); 
DateTime today = DateTime.Now; 
if (today.DayOfWeek != DayOfWeek.Monday && fileCreatedDate > today.AddDays(-2)) 
    { 
     fi.Delete(); 
    } 
0

更新了我的答案以滿足您的要求。有點怪,但我很無聊。如果只是閱讀,可能會有所幫助。

//2 days 
TimeSpan daysToKeep = new TimeSpan(2,0,0,0); 

//The folder where the files are kept 
DirectoryInfo backupFolder = new DirectoryInfo(@"\\Fabtrol-2\Program Files (x86)\FabTrolBackUp\"); 
//the Appendold.BAK file 
FileInfo backupLog = new FileInfo(backupFolder.FullName + @"\FT_Trans_Log_Appendedold.BAK"); 

//the base name for the log files 
string logName = "FT_FabTrol_{0}_Full.BAK"; 
//an array for the days of week that are part of the logname 
string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" }; 
//get yesterday's log file name 
string yesterdayLog = String.Format(logName, days[(int)DateTime.Today.AddDays(-1).DayOfWeek]); 
//create file info 
FileInfo logFile = new FileInfo(backupFolder.FullName + yesterdayLog); 

//if the file exists, and it is less than 2 days old 
try 
{ 
    if (logFile.Exists && (DateTime.Today - logFile.LastWriteTime < daysToKeep)) 
    { 
     backupLog.Delete(); 
     Console.WriteLine("success"); 
    } 
    else 
    { 
     Console.WriteLine("log file either did not exist or is not ready to delete"); 
    } 
} 
catch(Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
}