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

Discussion in 'Вопросы новичков' started by ZoomuaMM, Jul 12, 2019 at 10:50 AM.

  1. ZoomuaMM

    ZoomuaMM Client

    Joined:
    Dec 30, 2010
    Messages:
    7
    Likes Received:
    0
    Подскажите пожалуйста, есть ли простой способ реализовать следующее:

    Что имеется

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

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

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

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

    zarufakis Client

    Joined:
    Mar 22, 2019
    Messages:
    60
    Likes Received:
    21
    Не проше ли к названию файла добавлять некии значения/маркеры, на основании которых шаб будет понимать, какие манипуляции производились с данным профилем?
     
  3. ZoomuaMM

    ZoomuaMM Client

    Joined:
    Dec 30, 2010
    Messages:
    7
    Likes Received:
    0
    Нашел вроде бы что-то похожее на то, что мне нужно (но это не точно)

    https://docs.microsoft.com/ru-ru/do...argest-file-or-files-in-a-directory-tree-linq

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

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

    Code (text):
    1.  
    2. string startFolder = @"ТУТ МОЙ ПУТЬ К КАТАЛОГУ";
    3.  
    4.         // Take a snapshot of the file system.
    5.         System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
    6.  
    7.         //Return the FileInfo of the smallest file
    8.         System.IO.FileInfo smallestFile =
    9.             (from file in fileList
    10.              let len = GetFileLength(file)
    11.              where len > 0
    12.              orderby len ascending
    13.              select file).First();
    14.  
    15.         Console.WriteLine("The smallest file under {0} is {1} with a length of {2} bytes",
    16.                             startFolder, smallestFile.FullName, smallestFile.Length);
    17.  
    Получаю ошибку:

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

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

    twisterrr Client

    Joined:
    Dec 25, 2011
    Messages:
    30
    Likes Received:
    2
    добавь счетчик для загрузки профиля
     
  5. sergodjan66

    sergodjan66 Administrator Staff Member

    Joined:
    Sep 5, 2012
    Messages:
    9,180
    Likes Received:
    3,460
    Как вариант:

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

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

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

    Attached Files:

    Last edited: Jul 12, 2019 at 5:13 PM
  6. ZoomuaMM

    ZoomuaMM Client

    Joined:
    Dec 30, 2010
    Messages:
    7
    Likes Received:
    0
    Спасибо большое за вариант, вроде бы работает, но не будет ли проблем с производительностью? Дело в том, что у меня несколько сотен профилей, а планируется как минимум 1000 и больше, соответственно, при каждом выполнении шаблона цикл должнен будет выполниться сотни, а может и тысячу раз.

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

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

    sergodjan66 Administrator Staff Member

    Joined:
    Sep 5, 2012
    Messages:
    9,180
    Likes Received:
    3,460
    Думаю, что не будет проблем.
    В ПМ выполняется долго, т.к. там анимация по умолчанию включена,
    в ЗП будет быстрее намного.
     
  8. ZoomuaMM

    ZoomuaMM Client

    Joined:
    Dec 30, 2010
    Messages:
    7
    Likes Received:
    0
    спасибо, тогда попробую воспользоваться данным решением
     

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)