Как брать самый старый файл (по дате) из директории?

  • Автор темы Автор темы ruthless
  • Дата начала Дата начала

ruthless

Client
Регистрация
13.02.2017
Сообщения
230
Реакции
70
Баллы
28
Всем доброго времени суток. Ребят, прошу помощи - как брать самый старый файл (по дате) из директории? Буду благодарен за любой ответ :3
 
Список файлов в папке находится в списке "Список профилей в папке"
В примере ниже например, самый старый по дате файл из папки PROFILES (из тех что присутствуют в списке) будет записан в переменную old_profile
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список профилей в папке"];

List<string> files = Directory.GetFiles(project.Directory + @"/PROFILES").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];
 
  • Спасибо
Реакции: kagorec, lbvf65 и ruthless
Список файлов в папке находится в списке "Список профилей в папке"
В примере ниже например, самый старый по дате файл из папки PROFILES (из тех что присутствуют в списке) будет записан в переменную old_profile
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список профилей в папке"];

List<string> files = Directory.GetFiles(project.Directory + @"/PROFILES").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];
Благодарю дружище, сейчас протестирую)
 
  • Спасибо
Реакции: lbvf65
Список файлов в папке находится в списке "Список профилей в папке"
В примере ниже например, самый старый по дате файл из папки PROFILES (из тех что присутствуют в списке) будет записан в переменную old_profile
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список профилей в папке"];

List<string> files = Directory.GetFiles(project.Directory + @"/PROFILES").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список"];

List<string> files = Directory.GetFiles(project.Directory + @"{-Project.Directory-}Профили/Нужные профили/").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];

Повторил Ваш код, с нужными мне списками и директориями, но выполняется с ошибкой, в чем я ошибаюсь? Благодарю за ответ

Список и директории условные написал, так-же без {-Project.Directory-} пробовал, разницы нет

Данный список ведет на конечную директорию, то есть поддиректорий там нет, ваш прим. /PROFILES
 
Последнее редактирование:
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список"];

List<string> files = Directory.GetFiles(project.Directory + @"{-Project.Directory-}Профили/Нужные профили/").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];

Повторил Ваш код, с нужными мне списками и директориями, но выполняется с ошибкой, в чем я ошибаюсь? Благодарю за ответ

Список и директории условные написал, так-же без {-Project.Directory-} пробовал, разницы нет
Project.Directory - это папка проекта, а дальше после + это продолжение проекта, что бы быть уверенным, что вы сложили верную дорогу, сложите сначала ее с выводом в лог отдельно.
C#:
Развернуть Свернуть Копировать
return (project.Directory + @"\Профили\Нужные профили\");

Либо попробуйте так сразу:
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список"];

List<string> files = Directory.GetFiles(project.Directory + @"\Профили\Нужные профили\").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];
 
Последнее редактирование:
  • Спасибо
Реакции: ruthless
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список"];

List<string> files = Directory.GetFiles(project.Directory + @"{-Project.Directory-}Профили/Нужные профили/").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];

Повторил Ваш код, с нужными мне списками и директориями, но выполняется с ошибкой, в чем я ошибаюсь? Благодарю за ответ

Список и директории условные написал, так-же без {-Project.Directory-} пробовал, разницы нет

Данный список ведет на конечную директорию, то есть поддиректорий там нет, ваш прим. /PROFILES
Лул, мой косяк был в том что не прогнал куб на взятие файлов из нужной директории. В итоге отработал ваш C# сниппет, но взяло не самый старый файл из папки :(
 
Project.Directory - это папка проекта, а дальше после + это продолжение проекта, что бы быть уверенным, что вы сложили верную дорогу, сложите сначала ее с выводом в лог отдельно.
C#:
Развернуть Свернуть Копировать
return (project.Directory + @"\Профили\Нужные профили\");

Либо попробуйте так сразу:
C#:
Развернуть Свернуть Копировать
IZennoList lst = project.Lists["Список"];

List<string> files = Directory.GetFiles(project.Directory + @"\Профили\Нужные профили\").OrderBy(f => File.GetLastWriteTime(f)).ToList();

lst.AddRange(lst);

project.Variables["old_profile"].Value = lst[0];
Сейчас тестану, спс :)
 
  • Спасибо
Реакции: ruthless
Спасибо большое, гуглил, но не нашел, запрос иначе вводил.
По примеру из вашего совета (в разборе моего вопроса) нашёл решение, но там выводится в лог, а нужно в переменную.
Тут разбирали ваш вопрос

Что бы быстрее находить ответ, можно попробовать еще так гуглить.
 
Спасибо большое, гуглил, но не нашел, запрос иначе вводил.
По примеру из вашего совета (в разборе моего вопроса) нашёл решение, но там выводится в лог, а нужно в переменную.
Вопрос исчерпан. Не силен в C#, поэтому пришлось потупить. Прежде чем создавать сниппет, нужно добавить using из этого источника, где таится решение.
Решение:
Развернуть Свернуть Копировать
var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles(@"D:\Рабочий стол").OrderBy(f => f.CreationTime).First();
project.Variables["old_profile"].Value = (oldestFile.Path);
Так-же вариант, что-бы брать из условной папки профилей в директории проекта.
C#:
Развернуть Свернуть Копировать
var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles(project.Directory + @"\Профили\Нужные профили\").OrderBy(f => f.CreationTime).First();
project.Variables["old_profile"].Value = (oldestFile.Path);
 
Последнее редактирование:
Так-же вариант, что-бы брать из условной папки профилей в директории проекта.
C#:
Развернуть Свернуть Копировать
var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles(project.Directory + @"\Профили\Нужные профили\").OrderBy(f => f.CreationTime).First();
project.Variables["old_profile"].Value = (oldestFile.Path);
Приветствую. Подскажите как брать самый старый профиль (точнее с самой старой датой его изменения) из неопределенной папки, которая задается во входных настройках проекта?
Условно, чтобы вместо:0
C#:
Развернуть Свернуть Копировать
csharp]var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles(project.Directory + @"\Профили\Нужные профили\")

Было что-то вроде:
C#:
Развернуть Свернуть Копировать
csharp]var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles({-Variable.profiles_dir-})

Также интересна отдельным кубиком проверка "отлежки" профиля (чтобы скрипт проверял что профиль изменялся последний раз более 3 дней назад, например).
 
C#:
Развернуть Свернуть Копировать
// Получим файл с самой старой датой имземения
return new DirectoryInfo(project.Variables["переменная с путем до папки"].Value).GetFiles().OrderBy(x => x.LastWriteTime).FirstOrDefault();


C#:
Развернуть Свернуть Копировать
// Покажем в лог все файлы, дата изменения которых больше 3х дней
var lst = Directory.GetFiles(project.Variables["переменная с путем до папки"].Value).Select(x => new FileInfo(x)).Where(x => x.LastWriteTime < DateTime.Now.AddDays(-3));
foreach(var s in lst) project.SendInfoToLog(s.ToString());
 
  • Спасибо
Реакции: Dan и volody00
Приветствую. Подскажите как брать самый старый профиль (точнее с самой старой датой его изменения) из неопределенной папки, которая задается во входных настройках проекта?
Условно, чтобы вместо:0
C#:
Развернуть Свернуть Копировать
csharp]var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles(project.Directory + @"\Профили\Нужные профили\")

Было что-то вроде:
C#:
Развернуть Свернуть Копировать
csharp]var oldestFile = CodeProject.FastDirectoryEnumerator.EnumerateFiles({-Variable.profiles_dir-})

Также интересна отдельным кубиком проверка "отлежки" профиля (чтобы скрипт проверял что профиль изменялся последний раз более 3 дней назад, например).
Если не ошибаюсь, тут можно найти ответ: https://zennolab.com/discussion/threads/data-izmenenija-fajla.23367/post-644016
 
C#:
Развернуть Свернуть Копировать
// Получим файл с самой старой датой имземения
return new DirectoryInfo(project.Variables["переменная с путем до папки"].Value).GetFiles().OrderBy(x => x.LastWriteTime).FirstOrDefault();


C#:
Развернуть Свернуть Копировать
// Покажем в лог все файлы, дата изменения которых больше 3х дней
var lst = Directory.GetFiles(project.Variables["переменная с путем до папки"].Value).Select(x => new FileInfo(x)).Where(x => x.LastWriteTime < DateTime.Now.AddDays(-3));
foreach(var s in lst) project.SendInfoToLog(s.ToString());
Спасибо, работает!
По поводу проверки отлежки уточню: нужно чтобы код не выводил в лог время отлежки, или количество файлов, соответствующих заданному количеству дней, а было условие вида:
Проверяем дату последнего изменения файла -> если больше Х дней (задается переменной из настроек шаблона) берем в работу, если нет выводим сообщение и завершаем проект.
 
Спасибо, работает!
По поводу проверки отлежки уточню: нужно чтобы код не выводил в лог время отлежки, или количество файлов, соответствующих заданному количеству дней, а было условие вида:
Проверяем дату последнего изменения файла -> если больше Х дней (задается переменной из настроек шаблона) берем в работу, если нет выводим сообщение и завершаем проект.

тогда непонятно, зачем тебе нужно получить самый старый файл....
выстраивай логику, с локированием для многопотока, чтобы каждый поток взял исключительно
свой профиль с заданным кол-вом дней от последнего редактирования, без ошибки на повторное взятие этого профиля
 
тогда непонятно, зачем тебе нужно получить самый старый файл....
выстраивай логику, с локированием для многопотока, чтобы каждый поток взял исключительно
свой профиль с заданным кол-вом дней от последнего редактирования, без ошибки на повторное взятие этого профиля
Чтобы была возможность выбрать: брать самый старый профиль или профиль определенного возраста/даты изменения.
Брать самый старый профиль - вопрос под конкретную задачу был, а вот уже возможность установить дату изменения тут просто хотелось бы иметь такой кубик, может быть в разных проектах полезен.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)