Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Total7zip
Goto page Previous  1, 2, 3 ... 6, 7, 8 ... 63, 64, 65  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 17:00    Post subject: Reply with quote

Total7zip wrote:

если можно, то расскажите как упростить список.

В деталях не вспомню, это делалось довольно давно и я долго сравнивал списки на предмет нахождения закономерностей, но самим кодом могу поделиться:

Code:

void TransformList(ofstream& fout, wchar_t* lst)
{
   wstring name, lastName;
   size_t lastLength = 0xFFFF;
   while(*lst)
   {
      name = wstring(lst);
      size_t length = name.length();
      lst += length + 1;
      if(length > 3 && name.substr(length - 3) == L"*.*") name = name.substr(0, length - 4);
      if(length < lastLength || lastName != name.substr(0, lastLength))
      {
         lastName = name;
         lastLength = length;
         if(name[length - 1] == L'\\') name.resize(length - 1);
         fout << UnicodeToUTF8(name) << endl;
      }
   }
}


lst - это AddList который передает PackFiles() или DeleteList передаваемый DeleteFiles(). PackFiles также передает srcPath, я его использовал для задания текущего каталога(_wchdir) непосредственно перед упаковкой.
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 17:36    Post subject: Reply with quote

насколько я понял, ваш код рассчитан на то, что в списке, который передает тотал будут маски *.*
и если например есть
path1\*.*
то все, что начинется на path1 можно выкинуть.

к сожалению, этот вариант не работает.
тотал передает в плагин список файлов, не используя маски. и соответственно плагин не может предположить, что нужно взять все файлы из папки.
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 17:40    Post subject: Reply with quote

Total7zip wrote:
насколько я понял, ваш код рассчитан на то, что в списке, который передает тотал будут маски *.*
и если например есть
path1\*.*
то все, что начинется на path1 можно выкинуть.

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

Нет, мой код рассчитан на то, что тотал иногда передает маски *.*, хотя это происходит довольно редко. К тому же я даю код из рабочего плагина Smile
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 18:05    Post subject: Reply with quote

ваш код сокращает количество строк только если в списке есть
path1\*.*
в этом случае код отсеивает все, что начинается с path1

допустим из списка
path1\*.*
path1\readme.txt
path1\test.bmp
ваш код выкинет две последние строчки.

а если поменять порядок так
path1\readme.txt
path1\test.bmp
path1\*.*
то не выкинет ничего.

так как маски тотал мне не дает, получается бесполезная работа.

еще ваш код переводит из Unicode в UTF8, что конечно сокращает размер, но не изменяет ни количество строк, ни их длину.

соответственно, так как мне нужно передать дальше список в unicode
по-моему это бесполезный код.

правильно?

добавлю, что код ваш из рабочего плагина, конечно рабочий, потому что ничего не отсеивает =)
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 18:21    Post subject: Reply with quote

Total7zip wrote:

добавлю, что код ваш из рабочего плагина, конечно рабочий, потому что ничего не отсеивает =)

Ты мой код проверил? Думаешь когда я пишу, что из всей папки виндовс после трансформации остается одна строка, я на ходу придумываю? Smile
Беру, для примера, каталог Windows, кидаю туда один файл и папку с файлом, пакую, получаю "Windows", а тотал мне передавал:

Windows\
Windows\123.zip
Windows\abc\
Windows\abc\456.zip

Видишь тут *.* ? Идем дальше, заходим в папку Windows, выделяем все файлы, т.е. 123.zip и abc\, получаем:

123.zip
abc

А тотал передавал мне:

123.zip
abc\
abc\456.zip

и т.д....
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 18:27    Post subject: Reply with quote

тогда у вас баг -
тотал просил вас добавить
Windows\
Windows\123.zip
Windows\abc\
Windows\abc\456.zip

а вы получили на выходе вашего кода просто Windows.

то есть вместо двух файлов вы получили все содержимое папки.
согласны?
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 18:31    Post subject: Reply with quote

возможно я не прав,
если тотал передает такие списки когда вы выделяете папку.
то есть, сначала дает папку, а потом еще и ее содержание.
надо проверить.
тогда я не понимаю зачем тотал так делает.

то есть другими словами я не прав, если передавая Windows\ тотал имеет ввиду что надо добавить все файлы из папки Windows\
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 18:32    Post subject: Reply with quote

Total7zip wrote:
тогда у вас баг -
тотал просил вас добавить
Windows\
Windows\123.zip
Windows\abc\
Windows\abc\456.zip

а вы получили на выходе вашего кода просто Windows.

то есть вместо двух файлов вы получили все содержимое папки.
согласны?

Я паковал папку Windows, как тотал мог меня просить упаковать только ее часть? Smile Он честно передал мне все ее содержимое....
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 18:33    Post subject: Reply with quote

но код ваш всеравно расчитан на то, что тотал передает список в определенном порядке...

если Windows\ будет в конце ничего не отсеится....


ладно, я сдаюсь, давайте в ЛС перенесем это обсуждение.
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 19:14    Post subject: Reply with quote

Reflector, я готов извиниться если надо.
без обид.

просто ваш код расчитан на "тайное знание" о глюках тотала.
я задам вопрос на офиициальном форуме можно ли расчитывать на такое поведение, насколько это надежно и зачем это делается - сначала имя папки, а потом еще и список файлов. =)

без ответа на эти вопросы мне такой способ кажется ненадежным. это хак, работающий в конкретной версии из-за ее недокументированного поведения.
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 19:26    Post subject: Reply with quote

Total7zip wrote:

просто ваш код расчитан на "тайное знание" о глюках тотала.
я задам вопрос на офиициальном форуме можно ли расчитывать на такое поведение, насколько это надежно и зачем это делается - сначала имя папки, а потом еще и список файлов. =)

Возможно имя папки передается, т.к. папки бывают пустыми, кроме того тотал их еще и сам создает... В любом случае небольшая модификация позволит упрощать списки в которых имя каталога находится в любом месте или вообще отсутствует. Ушел делать Smile
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 19:41    Post subject: Reply with quote

если делать такую оптимизацию, то надо по-хорошему проверять является ли путь папкой.

потому что наличие "\" в конце никем не гарантировано.

то есть как-то так -
выбрать из списка только папки.
потом отсортировать их по длине имени и потом выкидывать все что начинается с них.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Fri Dec 03, 2010 20:33    Post subject: Reply with quote

Сейчас проверил на примере встроенного ZIP - скрытые файлы и папки тотал в архив все равно помещает. Но файлы и папки, указанные в списке исключений - нет.

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

Но если указано имя папки, это еще ничуть не значит, что все ее содержимое потом окажется в архиве.

А сокращать список, переданный тоталом, ИМХО бесполезно - тотал перечисляет в списке файлы, причем каждый файл ровно 1 раз. И пытаться сократить число строк списка тут - пустая затея, ведь число файлов после оптимизации списка измениться не должно.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 20:43    Post subject: Reply with quote

Total7zip wrote:

если делать такую оптимизацию, то надо по-хорошему проверять является ли путь папкой.

потому что наличие "\" в конце никем не гарантировано.

Ладно, делай как хочешь. Я считаю, что если тотал не будет обеспечивать единообразный интерфейс, то сделать по-хорошему будет очень проблематично в любом случае. А Гислер тот еще консерватор, быть такого не может, чтобы он убрал тот же "\" просто так зная, что это может привести к несовместимости.
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 20:56    Post subject: Reply with quote

MVV wrote:

Но если указано имя папки, это еще ничуть не значит, что все ее содержимое потом окажется в архиве.

Значит. Дело в том, что тотал передает относительные пути. Пакуя папку 123 целиком, ты получишь "123\" и это значит, что 123 пакуется целиком. Зайдя в эту папку, и пакуя из нее каталог 456, ты получишь "456\" и это также значит, что она пакуется целиком, т.к. нельзя находясь в 123\ выбрать только часть файлов из 456\, для этого нужно находится в 456. Но когда мы попадаем в 456, то не будет никаких "456\", ведь она считается корневой папкой, а сам путь 123\456\ передается в другой переменной...

Quote:

А сокращать список, переданный тоталом, ИМХО бесполезно - тотал перечисляет в списке файлы, причем каждый файл ровно 1 раз. И пытаться сократить число строк списка тут - пустая затея, ведь число файлов после оптимизации списка измениться не должно.

Похоже ты совсем не в теме Smile Сравни 53806 строк(в моем случае) с одной...
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 6, 7, 8 ... 63, 64, 65  Next
Page 7 of 65

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group