Ru-Board.club
← Вернуться в раздел «Программы»

» Autoplay Media Studio

Автор: KerberX
Дата сообщения: 18.07.2012 17:44
Может есть DLL какая-нибудь для этого? Или ещё что? Не очень мне хочется внешний архиватор использовать.
Автор: Zloy_Gelud
Дата сообщения: 18.07.2012 22:58
KerberX

Цитата:
Не очень мне хочется внешний архиватор использовать.

В данном случаем проще поступить именно так, чем написать работающий код..
Автор: Daem0n7
Дата сообщения: 19.07.2012 00:34
Robby
Большое спасибо! Все работает, кроме прочтения пункта "разрешение" из ини, ну думаю разберусь. Еще раз спасибо за помощь.
Автор: KerberX
Дата сообщения: 20.07.2012 19:26
Тогда не поможете ли мне в использовании 7z.exe от 7-Zip'а? Никак не получается написать нужную команду для архивации моего списка.
Автор: Lexua
Дата сообщения: 21.07.2012 10:07
KerberX
Код: Shell.Execute("AutoPlay\\Docs\\7zg.exe", "open", " a -t7z -y \""Путьдля архива\\имя_архива.7z\" \""Путь к папке с файлами\\*\"", "", SW_HIDE, true);
Автор: SuperDimon007
Дата сообщения: 21.07.2012 13:48
а можно как-то в указанной директории получить таблицу названий файлов с расширениями и папок.(желательно файлы и папки в отдельных таблицах)?
Автор: Zloy_Gelud
Дата сообщения: 21.07.2012 14:04
SuperDimon007

Код: local tFilesName = {};
local tDirsName = {};

local tFounded = File.Find("C:\\Program Files\\AutoPlay Media Studio 8 Trial", "*.*", false, true, nil, nil);
if tFounded then
local tPaths
for i = 1, #tFounded do
if File.GetAttributes(tFounded[i]).Directory then
tDirsName[#tDirsName + 1] = String.Mid(tFounded[i], String.ReverseFind(tFounded[i], "\\") + 1, -1);
else
tPaths = String.SplitPath(tFounded[i]);
tFilesName[#tFilesName + 1] = tPaths.Filename..tPaths.Extension;
end
end
end

Dialog.Message("Notice", Table.Concat(tFilesName, "\r\n", 1, TABLE_ALL).."\r\n\r\n"..Table.Concat(tDirsName, "\r\n", 1, TABLE_ALL));
Автор: KerberX
Дата сообщения: 22.07.2012 16:08
Хоть ты тресни не понимаю как мой список архивировать правильно. Есть такой список (это пример, не обязательно такой):
[more=Список]
C:\Program Files\Internet Explorer\en-US\hmmapi.dll.mui
C:\Program Files\Internet Explorer\en-US\ielowutil.exe.mui
C:\Program Files\Internet Explorer\en-US\jsdebuggeride.dll.mui
C:\Program Files\Internet Explorer\en-US\JSProfilerCore.dll.mui
C:\Program Files\Internet Explorer\ru-RU\iedvtool.dll.mui
C:\Program Files\Internet Explorer\ru-RU\ieinstal.exe.mui
C:\Program Files\Internet Explorer\ru-RU\iexplore.exe.mui
C:\Program Files\Internet Explorer\ru-RU\jsdbgui.dll.mui
C:\Program Files\Internet Explorer\ru-RU\jsprofilerui.dll.mui
C:\Program Files\Internet Explorer\SIGNUP\install.ins
C:\Program Files\Internet Explorer\ExtExport.exe
C:\Program Files\Internet Explorer\hmmapi.dll
C:\Program Files\Internet Explorer\ie8props.propdesc
C:\Program Files\Internet Explorer\iecompat.dll
C:\Program Files\Internet Explorer\iedvtool.dll
C:\Program Files\Internet Explorer\ieinstal.exe
C:\Program Files\Internet Explorer\ielowutil.exe
C:\Program Files\Internet Explorer\ieproxy.dll
C:\Program Files\Internet Explorer\IEShims.dll
C:\Program Files\Internet Explorer\iessetup.ceb
C:\Program Files\Internet Explorer\iessetup.dll
C:\Program Files\Internet Explorer\iexplore.exe
C:\Program Files\Internet Explorer\jsdbgui.dll
C:\Program Files\Internet Explorer\jsdebuggeride.dll
C:\Program Files\Internet Explorer\JSProfilerCore.dll
C:\Program Files\Internet Explorer\jsprofilerui.dll
C:\Program Files\Internet Explorer\msdbg2.dll
C:\Program Files\Internet Explorer\pdm.dll
C:\Program Files\Internet Explorer\sqmapi.dll
[/more]

Есть команда:
s7zG = Путь к этому 7zg.exe
sArchive - Полный путь к создаваемому архиву
sFilesList - Полный путь к списку файлов
sQuote - это у меня кавычка, чтобы не писать вручную.


Код: local nRet = Shell.Execute(s7zG, "open", " a -tzip -y "..sQuote..sArchive..sQuote.." -ir@"..sFilesList.." -scsWIN", "", SW_SHOWNORMAL, true);
Автор: Robby
Дата сообщения: 23.07.2012 13:50
KerberX
7zip действительно как-то своебразно работает со списком файлов... Rar все нормально архивирует с сохранением путей. Тебе нужно чтобы архив обязательно был zip?
Автор: Zloy_Gelud
Дата сообщения: 23.07.2012 14:24
KerberX
Вообще есть способ обойтись и без внешних архиваторов. Если все получится - выложу сэмпл.
Автор: KerberX
Дата сообщения: 23.07.2012 17:45
Robby, да обязательно zip. Zloy_Gelud, надеюсь получится.
Автор: Zloy_Gelud
Дата сообщения: 23.07.2012 20:28
KerberX
Мда. Вообщем, что получается... как ни крути, хоть используй WinApi, хоть COM-интефейс, получается, что придется использовать дополнительное копирование необходимых файлов из таблицы в отдельную папку. Ну а уж потом, файлы из этой папки архивировать. Т.е.получаем лишнее копирование. Неудобно конечо, но другого способа, к сожалению, я больше не вижу. Если тебя такая затея устраивает, то можно и набросать код.
Автор: KerberX
Дата сообщения: 23.07.2012 20:48
Я могу и сам такой код сделать, но набросай, вдруг твой способ лучше. У меня была идея удалять из имени файла один символ и заменять его на символ маски (?). Но у меня с этим что-то не получилось.
Автор: Robby
Дата сообщения: 23.07.2012 21:34
KerberX
а если не использовать список в командной строке, а просто в цикле пройтись по таблице добавляя по одному файлу в архив. Да уж 7-zip разочаровал несохранение путей это большой минус.
Автор: KerberX
Дата сообщения: 23.07.2012 23:06
Всё равно в корень лезут. Один раз даже фатальную ошибку выдал: "Move file error". Думал что если в качестве рабочей папки указать папку с обрабатываемым файлом, то выйдет, а нет.
Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 08:48
KerberX

Код: Zip.AddEx = function (sZipFile, tFiles)
--------------------------------------
-- создание временной папки
local sTempFolderName = "";
repeat
sTempFolderName = "";
while #sTempFolderName < 7 do
sTempFolderName = sTempFolderName .. String.Char(Math.Random(97, 122));
end
sTempFolderName = _TempFolder.."\\~"..sTempFolderName..".tmp";
until not Folder.DoesExist(sTempFolderName);
if not Folder.DoesExist(sTempFolderName) then Folder.Create(sTempFolderName); end
--------------------------------------
local tPaths, sNewPath
for i = 1, #tFiles do
tPaths = String.SplitPath(tFiles[i]);
sNewPath = sTempFolderName.."\\"..tPaths.Folder;
Folder.Create(sNewPath);
File.Copy(tFiles[i], sNewPath, false, true, false, false, nil);
end
Zip.Add(sZipFile, {sTempFolderName.."\\*.*"}, true, "", 5, nil, true);
Folder.DeleteTree(sTempFolderName, nil);
end


local t = {};
t[1] = "C:\\1.txt";
t[2] = "C:\\Folder1\\2.txt";
t[3] = "C:\\Folder2\\3.txt";

Zip.AddEx("C:\\123.zip", t);
Автор: KerberX
Дата сообщения: 24.07.2012 11:24
Спасибо! Вот только если файл большой то долго будет копироваться. А можно как-нибудь создавать структуру архива относительно какой нибудь папки, а не корня диска?
Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 11:35
KerberX

Цитата:
Вот только если файл большой то долго будет копироваться.

Это да.

Цитата:
А можно как-нибудь создавать структуру архива относительно какой нибудь папки, а не корня диска?

Не понял. Сейчас вся структура создается во временной папки Windows.
Автор: KerberX
Дата сообщения: 24.07.2012 11:40
Видишь ли у меня в архиве была структура от C:\Users\...\Desktop. Если на примере с моим списком мне нужно чтобы в корне были файлы: ExtExport.exe, hmmapi.dll, ... sqmapi.dll и папки en-US, ru-RU. Надеюсь понятно.
[more]
C:\Program Files\Internet Explorer\en-US\hmmapi.dll.mui
C:\Program Files\Internet Explorer\en-US\ielowutil.exe.mui
C:\Program Files\Internet Explorer\en-US\jsdebuggeride.dll.mui
C:\Program Files\Internet Explorer\en-US\JSProfilerCore.dll.mui
C:\Program Files\Internet Explorer\ru-RU\iedvtool.dll.mui
C:\Program Files\Internet Explorer\ru-RU\ieinstal.exe.mui
C:\Program Files\Internet Explorer\ru-RU\iexplore.exe.mui
C:\Program Files\Internet Explorer\ru-RU\jsdbgui.dll.mui
C:\Program Files\Internet Explorer\ru-RU\jsprofilerui.dll.mui
C:\Program Files\Internet Explorer\SIGNUP\install.ins
C:\Program Files\Internet Explorer\ExtExport.exe
C:\Program Files\Internet Explorer\hmmapi.dll
C:\Program Files\Internet Explorer\ie8props.propdesc
C:\Program Files\Internet Explorer\iecompat.dll
C:\Program Files\Internet Explorer\iedvtool.dll
C:\Program Files\Internet Explorer\ieinstal.exe
C:\Program Files\Internet Explorer\ielowutil.exe
C:\Program Files\Internet Explorer\ieproxy.dll
C:\Program Files\Internet Explorer\IEShims.dll
C:\Program Files\Internet Explorer\iessetup.ceb
C:\Program Files\Internet Explorer\iessetup.dll
C:\Program Files\Internet Explorer\iexplore.exe
C:\Program Files\Internet Explorer\jsdbgui.dll
C:\Program Files\Internet Explorer\jsdebuggeride.dll
C:\Program Files\Internet Explorer\JSProfilerCore.dll
C:\Program Files\Internet Explorer\jsprofilerui.dll
C:\Program Files\Internet Explorer\msdbg2.dll
C:\Program Files\Internet Explorer\pdm.dll
C:\Program Files\Internet Explorer\sqmapi.dll
[/more]

Вот так:


Сейчас у меня так:

Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 11:49
KerberX

Цитата:
Надеюсь понятно.

Понятно. Сейчас попробую поправить.

Добавлено:

Код: -- sZipFile - полный путь к архиву
-- tFiles - таблица файлов
-- nWorkDir - уровень рабочей папки (0 - корень диска)

Zip.AddEx = function (sZipFile, tFiles, nWorkDir)
nWorkDir = nWorkDir or 0;
--------------------------------------
-- создание временной папки
local sTempFolderName = "";
repeat
sTempFolderName = "";
while #sTempFolderName < 7 do
sTempFolderName = sTempFolderName .. String.Char(Math.Random(97, 122));
end
sTempFolderName = _TempFolder.."\\~"..sTempFolderName..".tmp";
until not Folder.DoesExist(sTempFolderName);
if not Folder.DoesExist(sTempFolderName) then Folder.Create(sTempFolderName); end
--------------------------------------
local tPaths, sNewPath, sFolder, nInd, nPos
for i = 1, #tFiles do
if File.DoesExist(tFiles[i]) then
tPaths = String.SplitPath(tFiles[i]);
sFolder = String.TrimLeft(tPaths.Folder, "\\");
if nWorkDir > 0 then
nInd = nWorkDir;
nPos = String.Find(sFolder, "\\", 1, false);
while (nPos ~= -1 and nInd ~= 0) do
sFolder = String.Mid(sFolder, nPos + 1, -1);
nInd = nInd - 1;
nPos = String.Find(sFolder, "\\", 1, false);
end
end
sNewPath = sTempFolderName.."\\"..sFolder;
Folder.Create(sNewPath);
File.Copy(tFiles[i], sNewPath, false, true, false, false, nil);
end
end
Zip.Add(sZipFile, {sTempFolderName.."\\*.*"}, true, "", 5, nil, true);
Folder.DeleteTree(sTempFolderName, nil);
end

Zip.AddEx("C:\\123.zip", t, 2);
Автор: KerberX
Дата сообщения: 24.07.2012 13:00
То что надо. Понять бы только как высчитывать этот уровень. Он ведь везде разный. Но с этим я сам справлюсь.
Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 13:13
KerberX


Цитата:
Понять бы только как высчитывать этот уровень. Он ведь везде разный.

А что тут высчитывать? Например:
C:\Program Files\Internet Explorer\SIGNUP
0: C:
1: Program Files
2: Internet Explorer
3: SIGNUP
Соответственно, если необходимо архивировать файлы/папки относительно папки Internet Explorer, то уровень будет равен 2. Или я опять не понял чего-то?
Автор: KerberX
Дата сообщения: 24.07.2012 13:18
Ну путь то и другой может быть. Не заставлять же пользователя вручную считать.

Как Explorer стал ссылкой?
Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 13:28
KerberX

Цитата:
Ну путь то и другой может быть. Не заставлять же пользователя вручную считать.

Ну можно в качестве параметра указывать кусок пути, который нужно отрезать, например, C:\Program Files\Internet Explorer\

Цитата:
Как Explorer стал ссылкой?

Форум спамит.
http://forum.ru-board.com/topic.cgi?forum=13&topic=2300
Автор: KerberX
Дата сообщения: 24.07.2012 13:31

Цитата:
Ну можно в качестве параметра указывать кусок пути, который нужно отрезать, например, C:\Program Files\Internet Explorer\

Да ладно! Что ж ты сразу то не сказал! Пойду ещё тестить.
Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 13:37
KerberX

Цитата:
Да ладно! Что ж ты сразу то не сказал! Пойду ещё тестить.

Ага. Только код перепиши немного.
Автор: KerberX
Дата сообщения: 24.07.2012 13:39
Может скажешь что надо переписать, а то я в твоём коде буду целый день разбираться.
Автор: Zloy_Gelud
Дата сообщения: 24.07.2012 14:23
KerberX

Код: -- sZipFile - полный путь к архиву
-- tFiles - таблица файлов
-- sWorkPath - рабочая папка

Zip.AddEx = function (sZipFile, tFiles, sWorkPath)
sWorkPath = sWorkPath or "";
--------------------------------------
-- создание временной папки
local sTempFolderName = "";
repeat
sTempFolderName = "";
while #sTempFolderName < 7 do
sTempFolderName = sTempFolderName .. String.Char(Math.Random(97, 122));
end
sTempFolderName = _TempFolder.."\\~"..sTempFolderName..".tmp";
until not Folder.DoesExist(sTempFolderName);
if not Folder.DoesExist(sTempFolderName) then Folder.Create(sTempFolderName); end
--------------------------------------
local tPaths, sNewPath, sFolder
for i = 1, #tFiles do
if File.DoesExist(tFiles[i]) then
tPaths = String.SplitPath(tFiles[i]);
if sWorkPath ~= "" then
if String.Right(sWorkPath, 1) ~= "\\" then sWorkPath = sWorkPath .. "\\"; end
sFolder = String.Mid(tPaths.Drive..tPaths.Folder, #sWorkPath + 1, -1);
else
sFolder = String.TrimLeft(tPaths.Folder, "\\");
end
sNewPath = sTempFolderName.."\\"..sFolder;
Folder.Create(sNewPath);
File.Copy(tFiles[i], sNewPath, false, true, false, false, nil);
end
end
Zip.Add(sZipFile, {sTempFolderName.."\\*.*"}, true, "", 5, nil, true);
Folder.DeleteTree(sTempFolderName, nil);
end

t = TextFile.ReadToTable("C:\\1.txt");
Zip.AddEx("C:\\123.zip", t, "C:\\Program Files\\Internet Explorer");
Автор: KerberX
Дата сообщения: 24.07.2012 14:31
Спасибо! Вот теперь именно то.
Автор: dallas page
Дата сообщения: 25.07.2012 09:39
Добрый день господа. Стыдно спрашивать. Мне нужно сделать поиск в нескольких папках, но выходит ошибка. Что я сделал не правильно?

Код: tblfolders = {};
tblfolders[1] = _SourceFolder .. "\\AutoPlay\\Docs\\1\\Base";
tblfolders[2] = _SourceFolder .. "\\AutoPlay\\Docs\\2\\Base";

t_Files = File.Find(tblfolders, "*.avi", true, false, nil, nil);

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140

Предыдущая тема: Media Player Classic - Home Cinema (MPC-HC)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.