Как ввести выходные данные для приложения “Поиск последнего созданного файла с заданным расширением”:

188
13 августа 2021, 23:40

Дано такое задание: Разработать консольное приложение "Поиск последнего созданного файла с заданным расширением":

 Входные данные: путь к папке и расширение файла
 Выходные данные: самый последний по дате создания файл заданного расширения. Если в директории несколько файлов с заданным расширением, то результатом должен быть самый "свежий" файл +  список файлов дата создания которых отличается от этого файла не более чем на 10 секунд.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FileSearch
{
    public class Program
    {
        public void Main(string[] args) 
        {
            Console.WriteLine("Путь:");
            string path = Console.ReadLine();
            if (Directory.Exists(path))
            {
                Console.WriteLine("Введите расширение");
                string type = Console.ReadLine();
                var result = Directory.EnumerateFiles(path, type);
                foreach (var m in result)
                    Console.WriteLine(m);
            }
            else
            {
                Console.WriteLine("No directory!");
            }
            new DirectoryInfo(path).GetFiles().OrderByDescending(o => o.LastWriteTime).FirstOrDefault();
        }
    }   
}
  1. Я пробовала написать вывод последнего по дате создания файла заданного расширения через, но не уверена в правильно использования такого формата

new DirectoryInfo(path).GetFiles().OrderByDescending(o => o.LastWriteTime).FirstOrDefault()

2.Как прописать выходные данные с условием (понимаю,что скорее всего через конструктор if..else,но как именно,хотелось бы узнать

Если в директории несколько файлов с заданным расширением, то результатом должен быть самый "свежий" файл + список файлов дата создания которых отличается от этого файла не более чем на 10 секунд.

Answer 1

Я увидел, что вам уже ответили, но я всё же решил сделать полный ответ. Вот я написал короткий код, который хорошо работает (если что, я сортировал их не по дате изменения, а по дате создания):

using System;
using System.IO;
using System.Linq;
namespace LastCreatedFileSearcher
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath, fileType;
            Console.Write("Путь: ");
            filePath = Console.ReadLine();
            if (Directory.Exists(filePath))
            {
                Console.Write("Расширение: ");
                fileType = Console.ReadLine();
                var foundFiles = new DirectoryInfo($"{filePath}").GetFiles($"*.{fileType}");
                if (foundFiles.Length > 0)
                {
                    foundFiles = foundFiles.OrderByDescending(file => file.CreationTime).ToArray();
                    var lastCreatedFile = foundFiles.First();
                    foundFiles = foundFiles.TakeWhile(file => lastCreatedFile.CreationTime - file.CreationTime <= new TimeSpan(0, 0, 10)).ToArray();
                    for (int i = 0; i < foundFiles.Length; i++)
                    {
                        if (i == 1) Console.WriteLine("Файлы, созданные в ближайшие 10 сек после последнего созданного:");
                        Console.WriteLine($"{i+1}. Имя файла: {foundFiles[i].Name} | Дата создания: {foundFiles[i].CreationTime}");                        
                    }
                }
                else
                {
                    Console.WriteLine($"Файлов с расширением '.{fileType}' в директории не существует");
                }
            }
            else
            {
                Console.WriteLine("Директории не существует");
            }
            Console.ReadKey();
        }
    }
}

Я не буду повторяться про GetFiles(string) и т.д., а укажу на некоторые другие маленькие ошибки в стиле кода. Они не так важны, тем более раз вы только начинаете изучать C#, однако в будующем эти советы вам, возможно, пригодятся (если кто то не согласен, поправьте меня):

  • Именуйте переменные более корректно, например: не result, а более корректно было бы назвать foundFiles, не o, а file и т.д.
  • Перед конструкцией if обычно оставляют пустую строку
  • Путь и расширение вы написали по-русски, а No directory - по-английски
READ ALSO
interop Word c# замена слов

interop Word c# замена слов

Я методом Find заменяю некоторые слова, потом сохраняю ворд как пдф, но мне так надо сделать 100 разИ что бы не сохранять изменения а получить...

157
Проблема с памятью в ASP.NET Core

Проблема с памятью в ASP.NET Core

Не знаю точно, что с памятью, может утечка, может это нормально, хотел узнать, кто в этом понимает, чтобы избежать такого в дальнейшем

280
Удаление \n из строки

Удаление \n из строки

Это произошло внезапно

333
Архивация файлов, находящихся в MemoryStream

Архивация файлов, находящихся в MemoryStream

На сервере в БД хранятся файлыНеобходимо отправлять эти файлы на почту

244