Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2016, 00:49   #1
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Когда открываешь txt файл в рар архиве и изменяешь его и обратно сохраняешь в тот же архив, возможно ли сделать замену чтобы на все файлы?

или может быть вирус можно сделать который сделает замену ну то есть Replace("","");

Последний раз редактировалось Stilet; 12.01.2016 в 09:17.
komra2 вне форума Ответить с цитированием
Старый 12.01.2016, 09:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Без перераспаковки всего врядли получится. Не думаю что РАР способен на такое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2016, 09:26   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

Никаких "сделать замену чтобы на все файлы" не получится.

ещё раз.
по шагам.
Шаг один. Распаковываешь то, что нужно изменять в архиве.
Шаг два. Изменяешь то, что нужно в этих распакованных файлах.
Шаг три. Запаковываешь то, что изменил в архив.

шаг один и шаг три выполняются при использовании архиватора.

Есть ещё вопросы?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2016, 09:49   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Без перераспаковки всего врядли получится.
Зачем всего? Достаточно только тот файл, что нужно изменить. Распаковать файл, изменить, запаковать обратно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.01.2016, 11:14   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробую пояснить для товарисча на примере из Алисы.
Я, если добавляю к архиву файл (редактирую или просто дописываю - не важно) перепаковываю архив:
Код:
   streams:=nil;
   AsAppend:=FileExists(too+'.'+zipClass) and (not Recreate);

//Если установлен флаг добавить или отредактировать:
   if AsAppend then begin
//Создаю массив стримов, для вмещения распакованных файлов
    streams:=TObjectList.create(true);
//Открываю архив
    archOpen:=CreateInArchive(zClass);
    archOpen.OpenFile(too+'.'+zipClass);

//В цикле по его внутренностям
    for i:=0 to archOpen.NumberOfItems-1 do begin
//Создаю новый стрим для очередного файла
     ms:=TMemoryStream(streams[streams.Add(TMemoryStream.Create)]);
//Извлекаю файл!! Вот тут важно!!!
     archOpen.ExtractItem(i,ms,false); ms.Position:=0;

     IsFold:=archOpen.GetItemIsFolder(i);
     mspath:=archOpen.GetItemPath(i);
//И извлеченное добавляю в (ВАЖНО!!!) новый архив.
     Arch.AddStream(ms,soReference,faArchive,CurrentFileTime,CurrentFileTime,mspath,IsFold,True);
    end;
//Только после перепаковки в новый архив он создается архиватором
    archOpen.Close;
    Result:=true;
   end;
Т.е. сама фишка в том, что чтоб добавить к архиву или отредактировать, нужно все все все сначала извлечь из него в некий динамический список упакованные там файлы. Потом этот список передается архиватору, и только когда вызывается метод Close() архиватор начинает упаковку списка.
Список должен обязательно существовать до вызова этого метода. Иначе архив не создастся. Поэтому приходится все распакованное, сколько бы оно не занимало, хранить отдельно.

вот така чухня, малята...
Думаю что и в РАРе дела обстоят не лучше. Могу конечно ошибаться, но это нужно спецификацию по рару смотреть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2016, 11:47   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И как это объясняет необходимость распаковать весь архив для обновления 1 файла? Реализация CreateInArchive и класса возвращаемого им объекта не показана.

В предыдущей теме была ссылка на описание консольной команды винрара для добавления/обновления файла в архив.
И в 7z тоже есть, я когда-то писал небольшую утилиту для создания zip архива с помощью 7za (консольный), файлы для простоты добавлялись по одному.

А проверить осуществимость этого просто — создать архив на несколько ГБ винраром (и zip, и rar) и добавить туда новый файл, увидеть что это занимает несколько секунд, а не минут. И с 7z (zip, 7z) это тоже работает.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 12.01.2016 в 12:08.
Alex11223 вне форума Ответить с цитированием
Старый 12.01.2016, 12:15   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Думаю что и в РАРе дела обстоят не лучше. Могу конечно ошибаться, но это нужно спецификацию по рару смотреть.
Немного лучше. На полноту информации не претендую, но в РАРе есть таблица ссылок на упакованные файлы. Распаковывается только один выбранный файл. Если его размер не изменился после редактирования, он запаковывается на то-же место. Если размер изменился, то на прежнее место запаковывается всё, что соответствует размеру, а остаток запаковывается в "хвост" архива. При этом в экстент таблицы добавляется адрес этого "хвоста". Поэтому скорость упаковки намного выше, чем переупаковка всего архива. Как это реализовано на программном уровне не помню. Но где-то примерно так как описал.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 12.01.2016, 20:22   #8
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Без перераспаковки всего врядли получится. Не думаю что РАР способен на такое.
Да пусть без распаковки нельзя, ладно, но можно же сделать вирус или софт который будет запущен в архиве чтобы сделать рас- и запаковку простого текста в txt замену что -то на что-то ? Чтобы когда я его запускаю в архиве то Replace будет на все txt в данном архиве....

Последний раз редактировалось komra2; 12.01.2016 в 20:26.
komra2 вне форума Ответить с цитированием
Старый 12.01.2016, 21:05   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это не вирус, а чтобы понять возможно ли это надо изучать спецификацию выбранного формата (если она доступна, то есть zip или 7z, а rar отпадает, разве что вы и реверс-инжинирнгом займетесь).
zip — http://www.iso.org/iso/home/store/ca...csnumber=60101
7z — "The 7z file format specification is distributed with 7-Zip's source code. The specification can be found in plain text format in the 'doc' sub-directory of the source code distribution."
rar (только распаковка) — http://www.rarlab.com/technote.htm

Думаете это проще, чем распаковать и запаковать обычным способом? И чем это лучше?

Или он с паролем, как и тот PDF? Тогда скорее всего в любом случае в очередной раз обломаетесь.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 12.01.2016 в 21:13.
Alex11223 вне форума Ответить с цитированием
Старый 12.01.2016, 21:32   #10
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

нет, не pdf, никого отношение к нему данный вопрос не имеет..

То есть с этим облом "софт который будет запущен в архиве чтобы сделать рас- и запаковку простого текста в txt замену что -то на что-то ?"

Последний раз редактировалось Stilet; 13.01.2016 в 09:38.
komra2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Zip-архив RUSlan48 Общие вопросы Delphi 7 20.02.2014 01:44
Файл + архив demon-sheff Общие вопросы Delphi 11 25.06.2013 06:25
Архив xakkkkker Общие вопросы Delphi 1 09.03.2010 21:10
Архив xakkkkker Общие вопросы Delphi 4 04.01.2010 18:49
Архив PAVEL315 Общие вопросы Delphi 8 20.04.2008 19:14