Как брать из папки наименьший по весу файл для дальнейшей работы

ZoomuaMM

Client
Регистрация
30.12.2010
Сообщения
8
Благодарностей
0
Баллы
1
Подскажите пожалуйста, есть ли простой способ реализовать следующее:

Что имеется

Папка с файлами, все файлы одного формата .zpprofile (профиль пользователя), но разного размера (от нескольких десятков килобайт, до нескольких сотен килобайт)

Что необходимо

Чтобы при каждом выполнении шаблона Зеннопостер всегда брал из папки файл (профиль) с наименьшим размером. Соотстветственно, после выполнения работы шаблона размер файла увеличится и он уже не будет файлом с наименьшим размером, поэтому при следующем выполнении шаблона Зеннопостер возьмёт уже другой файл и так по кругу.

P.S.: На данный момент зеннопостер просто берет список файлов (пути к ним) из папки и помещает их в список, а потом в рандомном порядке дергается строчка из списка. Но при таком аглоритме получается не очень равномерно, некоторые профили разрастаются, а некоторые ни разу зенно так и не взял в работу.
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 743
Благодарностей
1 137
Баллы
113
Не проше ли к названию файла добавлять некии значения/маркеры, на основании которых шаб будет понимать, какие манипуляции производились с данным профилем?
 

ZoomuaMM

Client
Регистрация
30.12.2010
Сообщения
8
Благодарностей
0
Баллы
1
Нашел вроде бы что-то похожее на то, что мне нужно (но это не точно)

https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/linq/how-to-query-for-the-largest-file-or-files-in-a-directory-tree-linq

Может быть код из статьи по ссылке можно как-то преобразовать, чтобы он делал то, что мне нужно?

Я пробовал использовать в кубике C# вот такой код:

Код:
string startFolder = @"ТУТ МОЙ ПУТЬ К КАТАЛОГУ";

        // Take a snapshot of the file system.
        System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);

        //Return the FileInfo of the smallest file
        System.IO.FileInfo smallestFile =
            (from file in fileList
             let len = GetFileLength(file)
             where len > 0
             orderby len ascending
             select file).First();

        Console.WriteLine("The smallest file under {0} is {1} with a length of {2} bytes",
                            startFolder, smallestFile.FullName, smallestFile.Length);
Получаю ошибку:

Компиляция кода Ошибка в действии "CS0103" "Имя "GetFileLength" отсутствует в текущем контексте". [Строка: 8; Cтолбец: 24]

Я в программировании практически ничего не понимаю, только самые базовые вещи, так что это просто пальцем в небо. Но может быть если немного подправить, то заработает?
 

twisterrr

Client
Регистрация
25.12.2011
Сообщения
284
Благодарностей
23
Баллы
18
добавь счетчик для загрузки профиля
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 564
Благодарностей
9 179
Баллы
113
Что необходимо

Чтобы при каждом выполнении шаблона Зеннопостер всегда брал из папки файл (профиль) с наименьшим размером.
Как вариант:

- вычисление размера всех профилей, добавление в список
- помещение размера в байтах и пути профиля в таблицу,
- сортировка по возрастанию по столбцу A (по размеру файла),
- взятие первой строки таблицы (там будет наименьший по размеру профиль).

Пример шаблона приложил.

upload_2019-7-12_18-0-14.png
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Brinkman

ZoomuaMM

Client
Регистрация
30.12.2010
Сообщения
8
Благодарностей
0
Баллы
1
Спасибо большое за вариант, вроде бы работает, но не будет ли проблем с производительностью? Дело в том, что у меня несколько сотен профилей, а планируется как минимум 1000 и больше, соответственно, при каждом выполнении шаблона цикл должнен будет выполниться сотни, а может и тысячу раз.

Правильно ли использовать такое решение при таком количестве итераций цикла?

Я пытался ещё нагуглить и надеялся на какое-то решени с помощью C#, sergodjan66 скажите пожалуйста, а варианты предложенные по этой ссылке - https://stackoverflow.com/questions/27671590/largest-file-in-directory не получится использовать (возможно что-то подправив под зенно)?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 564
Благодарностей
9 179
Баллы
113
Спасибо большое за вариант, вроде бы работает, но не будет ли проблем с производительностью? Дело в том, что у меня несколько сотен профилей, а планируется как минимум 1000 и больше, соответственно, при каждом выполнении шаблона цикл должнен будет выполниться сотни, а может и тысячу раз.

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

ZoomuaMM

Client
Регистрация
30.12.2010
Сообщения
8
Благодарностей
0
Баллы
1
спасибо, тогда попробую воспользоваться данным решением
 

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