если заявления, чтобы оценить многократные даты файла

Я плохо знаком с 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 я обновил свой ответ, чтобы соответствовать вашим требованиям (я думаю). Просто к вашему сведению.
добавлено автор 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();

Затем в петле повторите по всем именам файлов в файлы и проверка, достаточно ли они стары.

Чтобы получить метку времени файла, используйте 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, ли это .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
        }  
    }
}
0
добавлено

Лично для одного недельного опыта я сказал бы, что вы вскочили в глубину.

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

  1. Изучает streamwriter/ читатель и filewriter и fileinfo.
  2. От этого, можно тогда прочитать файлы, delete/rename/whatever вы, хочет действительно.
  3. , который тогда необходимо попытаться понять , как мог, я утверждаю то, что я делаю . К сожалению для новичка это более твердо, чем можно думать, возможно тяжелее, чем первые два пункта для некоторых людей. Думайте от простого вперед, мы, разработчики обычно усложняют вещи. Эта часть на самом деле довольно легка так долго, ваш материал файла правилен!

Можно хотеть изучить поблочное тестирование, поскольку это может помочь проверке.

0
добавлено

1-е проверки этого кода, если файлу на основе дня меньше чем 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
добавлено
Этот isn' t намного лучше, чем, что уже имеет OP
добавлено автор dtsg, источник
Это находится в C#, что он написал, был в словах. Я понял вопрос спросить, как написать его если заявление в c#. Я don' t думают, что вопрос был о том, как проверить, ли этому 2 дня.
добавлено автор Nick Bray, источник
Поместите это в блок попытки вашего кода.
добавлено автор Nick Bray, источник
@MichaelTerrian я зафиксировал его, удалив дополнительное() в той линии
добавлено автор Nick Bray, источник
@MichaelTerrian, О, жаль, необходимо изменить линию; натяните имя файла = директор;
добавлено автор Nick Bray, источник
Ник попробовал его, но ожидайте ошибочное Имя метода на этой линии (новый FileInfo (директор + "FT_Trans_Log_Appendedold. BAK") ()).Delete ();
добавлено автор Michael Terrian, источник
Хорошо I' ll дают его, попытка благодарит
добавлено автор Michael Terrian, источник
Отлаживая я получаю ошибочную Ошибку "Использование неназначенной локальной переменной ' fileName' "
добавлено автор Michael Terrian, источник
Я могу getpast ошибка, если я добавляю это, чтобы натянуть имя файла = Путь. GetFileName ("\\Файлы Fabtrol-2\Program (x86) \FabTrolBackUp \");
добавлено автор Michael Terrian, источник
Ник, который добился цели. Я должен был сделать немного больше щипания, но оно прокладывает себе путь, мне нужно оно к. Большое спасибо.
добавлено автор Michael Terrian, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot