бірнеше файл күндерін бағалауға арналған мәлімдемелер

Мен C# -ке (аптадан кем) жаңа, менде файлды дыбыс деңгейінде жоятын келесі код бар. Бұл SQL дерекқоры үшін резервтік файл. Және ол мерзімді түрде өсіп келеді, мен файлдың атын өзгертуге және жаңа файл сақталғаннан кейін оны жоюға тура келеді. Мен сақтық көшірменің жұмысын тексердім, содан кейін файлды жою дұрыс.

    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
  • Егер басқа күні болса, онда = Бейсенбі және файл FT_FabTrol_Wed_Full.BAK күні 2 күннен аз болса, онда FT_Trans_Log_Appendedold.BAK
  • Егер басқа күндер болса, онда = жұма және файл FT_FabTrol_Thurs_Full.BAK күні 2 күннен аз болса, онда FT_Trans_Log_Appendedold.BAK
  • Егер басқа күндер болса, онда = сенбі және файл FT_FabTrol_Fri_Full.BAK күні 2 күннен аз болса, онда FT_Trans_Log_Appendedold.BAK
  • Егер күні бүгінге қалдырылған болса, жексенбі және файл FT_FabTrol_Sat_Full.BAK күні 2 күннен аз болса, онда FT_Trans_Log_Appendedold.BAK
1
Мүмкін сіз екі күннен асқан файлдарды жойғыңыз келіп, соңғы жаңартуларды сақтағыңыз келе ме?
қосылды автор Steve, көзі
Барлық ifs жібере аласыз. Егер файл 2 күннен асқан болмаса, оны жойыңыз. Бұл дұрыс па?
қосылды автор Andre Calil, көзі
FileInfo сыныбы сізге күндерді құру/өзгерту туралы ақпарат алуға көмектеседі. msdn.microsoft.com/en-us/library/system. io.fileinfo.aspx
қосылды автор Gray, көзі
@MichaelTerrian Мен сіздердің талаптарыңызға сәйкес жауапты жаңарттым (менің ойымша). Тек fyi.
қосылды автор Gray, көзі
Мен екі нәрсені істейтін жауапты жібердім.
қосылды автор Nick Bray, көзі
Жоқ, екі шарт орындалуы керек. 1) Егер бүгінгі күні = жексенбі 2) және файл FT_FabTrol_Sat_Full.BAK күні 2 күннен аз болса, онда FT_Trans_Log_Appendedold.BAK
қосылды автор Michael Terrian, көзі

7 жауаптар

Сіз бұл логиканы айтарлықтай жеңілдете аласыз: -

FileInfo info = new FileInfo(@"\\Fabtrol-2\Program Files (x86)\FabTrolBackUp\FT_Trans_Log_Appendedold.BAK");
if(DateTime.Now.AddDays(-2) > info.LastWriteTime.Date)
{
    //Delete
}
3
қосылды

Сіз жасаған барлық нәрселер сіздің қалтадағы барлық файлдардан итерация жасап, екі күннен асқан, оң жаққа қарай (бұл сіздің үлкен шартты мәлімдемеңізге ұқсайды) болып табылады.

Мысалы, қалтадағы барлық файлдарды алу үшін келесі жолды пайдаланыңыз:

string[] files = Directory.GetFiles();

Содан кейін, циклде files ішіндегі барлық файл атауларын итерациялаңыз және олардың жеткілікті үлкен екенін тексеріңіз.

Файлдың уақыт белгісін алу үшін FileInfo және LastWriteTime сияқты мына әрекеттерді пайдаланыңыз:

if(DateTime.Today - someFileInfoObject.LastWriteTime.Date > new TimeSpan(2,0,0,0))
{
    File.Delete(); 
}
1
қосылды

Төменде кодты көріңіз.

 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);
}
0
қосылды

@Gray түсіндіргенде, FileInfo нысаны сізге . . -ді білдіруге мүмкіндік береді. Бұл файлдың әлі де бар екенін білу үшін try/catch-ға тәуелді болу қажеттілігін жеңілдетеді.

Төмендегілерді қарастырайық:

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
        }  
    }
}
0
қосылды

Өзіңіздің жеке тәжірибеңізге бір аптадай уақыт өткен соң, сіз өзіңіздің тереңдігіңізге секіргеніңізді айтатын едім.

I'm not going to provide code, rather direct you to improve your learning, this is referred to psuedo code

  1. streamwriter /reader және filewriter бөліміне және fileinfo.
  2. Осыдан кейін сіз файлдарды оқып, атын өзгертуіңізге/шынымен қалағаныңызша оқи аласыз.
  3. Сонда сіз мен істеп жатқанымды қалай тексере аламын? . Өкінішке орай, жаңадан бастағандар үшін бұл сіз ойлағаннан әлдеқайда қиын, кейбір адамдар үшін алғашқы екі ұпайдан әлдеқайда қиын. Қарапайым ойлана беріңіз, біз әзірлеушілер әдетте күрделі нәрселерден асып түседі.












    Сіз сынақтан өтуге көмектесуіңіз мүмкін, себебі бұл сіздің тексеруіңізге көмектеседі.

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");
                }
0
қосылды
Бұл ОП-дан әлдеқайда жақсы емес
қосылды автор dtsg, көзі
C # -де ол жазған сөзі болды. Мен оның сұранымын C# жазуға қалай жазу керектігін сұрайтын мәселені түсіндім. Менің ойымша, бұл мәселе 2 күн болғанда қалай тестілеу туралы.
қосылды автор Nick Bray, көзі
Оны кодтың әрекет ету блогына қойыңыз.
қосылды автор Nick Bray, көзі
@MichaelTerrian Мен бұны қосымша жолды() осы жолдан алып тастадым
қосылды автор Nick Bray, көзі
@MichaelTerrian О, өкінішке орай, сызықты өзгерту керек; string filename = dir;
қосылды автор Nick Bray, көзі
Nick бұл тырысты, бірақ қате жібереді Бұл жолда әдіс атауы күтілуде (жаңа FileInfo (dir + «FT_Trans_Log_Appendedold.BAK») ()).
қосылды автор Michael Terrian, көзі
Жақсы көріңіз, рахмет
қосылды автор Michael Terrian, көзі
Отладка кезінде қатені аламын Error «Unassigned local variable» fileName пайдалану «»
қосылды автор Michael Terrian, көзі
Егер мен оны string filename = Path.GetFileName (@ «\\ Fabtrol-2 \ Program Files (x86) \ FabTrolBackUp \») қоссам, қате жібере аламын;
қосылды автор Michael Terrian, көзі
Ник, ол жасаған. Мен біразырақ бұрылуға тура келді, бірақ ол маған қажет болатын жолмен жұмыс істейді. Көп рақмет.
қосылды автор Michael Terrian, көзі