узнать суммарный размер файлов через макрос

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
Sitivrat
Posts: 39
Joined: Mon 29 Aug, 2005 00:16
Location: Belarus Grodno
Contact:

узнать суммарный размер файлов через макрос

Post by Sitivrat »

Задача: есть на активной панели N выделенных файлов и директорий. Если их размер больше, к примеру 250мб, отдать их одному плугу, иначе - другому. Всё бы хорошо, только вот как узнать суммарный размер файлов через макрос?
применение: большие файлы, или директории копировать с помощью Background Copy, остальное стандартным копировальщиком или Extended Copy.
# Не умеешь работать мышкой - работай лопатой...
Image
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

Post by [e]Bu$ter »

Видимо тут нужно читать и что-то придумывать: http://forum.farmanager.com/viewtopic.php?t=1068
User avatar
Sitivrat
Posts: 39
Joined: Mon 29 Aug, 2005 00:16
Location: Belarus Grodno
Contact:

Post by Sitivrat »

Спасибо. Вроде и поиском смотрел, и в апи лазил.
# Не умеешь работать мышкой - работай лопатой...
Image
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

Post by [e]Bu$ter »

Если получится чего, поделитесь результатом ;)
User avatar
Sitivrat
Posts: 39
Joined: Mon 29 Aug, 2005 00:16
Location: Belarus Grodno
Contact:

Post by Sitivrat »

Конечно. "Если получится чего".
1. panelitem(0,0,6) возвращает размер файла под курсором. И только файла.
2. Ничего путного не нашел по поводу itemIndex. Известно, что 0 - текущий файл. -1 выдаёт тож самое. Возможно где-то тут собака и порылась(в макросах особо не разбираюсь).
# Не умеешь работать мышкой - работай лопатой...
Image
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Sitivrat
В цикле пройдись по выделенным элементам, на каталогах дополнительно нажимай F3...
User avatar
Sitivrat
Posts: 39
Joined: Mon 29 Aug, 2005 00:16
Location: Belarus Grodno
Contact:

Post by Sitivrat »

О. Спасибо. осталось суммировать.

Code: Select all

  %x=0; 
  Home 
  $While(!APanel.Eof) $If(APanel.Folder) F3 $End Down $End 
  Home 
  $While(!APanel.Eof) $If(PanelItem(0,0,8)) %x=PanelItem(0,0,6)+%x; 
  $End Down $End
на выходе имеем общий размер выделенных файлов и директорий
сравнить - дело малое.
# Не умеешь работать мышкой - работай лопатой...
Image
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Только надо еще учитывать, что последний элемент панели тоже может быть выделен.
User avatar
Sitivrat
Posts: 39
Joined: Mon 29 Aug, 2005 00:16
Location: Belarus Grodno
Contact:

Post by Sitivrat »

Code: Select all

%x=0; 
Home 
$While(!APanel.Eof) $If(APanel.Folder) F3 $End 
$If(PanelItem(0,0,8)) %x=PanelItem(0,0,6)+%x; $End 
Down 
$End 
$If(APanel.Eof && APanel.Folder) F3 %x=PanelItem(0,0,6)+%x; 
$Else %x=PanelItem(0,0,6)+%x; 
$End
# Не умеешь работать мышкой - работай лопатой...
Image
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Свой вариант: :)

Code: Select all

%n=panelitem(0,0,0);
Home
%s=0;
$rep(apanel.itemcount)
 $if(panelitem(0,0,8))
  $if(APanel.Folder)
   F3
  $end
  %s=%s+(panelitem(0,0,6));
 $end
 Down
$end
panel.setpos(0,%n)
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

Post by [e]Bu$ter »

На основе кода от DrKnS законченный макрос «для тех кому лень»:

Code: Select all

%n=panelitem(0,0,0); 
%s=0; 
%c=APanel.SelCount;
$if(%c>0)
  Home
  $rep(apanel.itemcount)
    $if(panelitem(0,0,8))
      $if(APanel.Folder)
        F3
      $end
      %s=%s+(panelitem(0,0,6));
    $end
    Down
  $end
  panel.setpos(0,%n);
$else
  $if (Bof & !APanel.Root)
    CtrlPgUp
  $end
  $if(APanel.Folder)
    F3
  $end
  %s=(panelitem(0,0,6));
$end
$if (%s<273154048)
  F11 >
  $if (%c>0)
    1
  $else
    3
  $end
$else
  F11 B 1
$end
Если размер объекта под курсором или общий размер всех помеченных объектов на панели больше 256M, то вызываем BCopy, иначе — FileCopyEx.
Если курсорс стоит на ".." и помеченых файлов нет, то копирование вызвается для всей папки (выходим на уровень вверх, и вызываем нужный плагин оттуда).
Кроме того, при вызове FileCopyEx учитывается количество копируемых файлов.


Вот ещё раз он же, но в готовом к употреблению виде:

Code: Select all

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\F5]
"Sequence"="%n=panelitem(0,0,0);  %s=0;  %c=APanel.SelCount; $if(%c>0) Home $rep(apanel.itemcount) $if(panelitem(0,0,8)) $if(APanel.Folder) F3 $end %s=%s+(panelitem(0,0,6)); $end Down $end panel.setpos(0,%n); $else $if (Bof & !APanel.Root) CtrlPgUp $end $if(APanel.Folder) F3 $end %s=(panelitem(0,0,6)); $end $if (%s<273154048) F11 > $if (%c>0) 1 $else 3 $end $else F11 B 1 $end"
"DisableOutput"=dword:00000001
Post Reply

Return to “Обсуждение макросов”