0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19

Как разбить файл на две части, разархивировать и изменить вторую часть, а потом собрать файл обратно?

14.10.2014, 17:22. Показов 2468. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Хочу поднять тему Ципиховича Эндрю (в праве поднять тему отказано: новый вопрос, новая тема - примечание модератора).
Вопрос в следующем: есть файл XXX.pc3 (файл конфигурации принтера автокада), вроде бы является архивом, сжатым архиватором. Надо программно поменять настройки плоттера. Для этого надо считать этот файл,начиная с 60го байта, разархивировать его, поменять чего требуется, и заархивировать обратно. В части vba опыта мало, поэтому прошу помощи в написании данного кода
Вот что есть:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub readfpc3()
    Dim fso
    Dim S As String
    Set fso = CreateObject("Scripting.FileSystemObject")
   ' Set objShell = CreateObject("Shell.Application")
    folder = "C:\Users\ternovykh.MOSTDORPROEKT\AppData\Roaming\Autodesk\C3D 2015\rus\Plotters\"
    FN = folder + "HP127 2200 x 914.pc3"
    FN1 = folder + "HP127 2200 x 914.rar"
 
    Set ts = fso.OpenTextFile(FN, 1)
    Set ts1 = fso.OpenTextFile(FN1, 2, True)
 
    Open FN For Binary As #1
    L = FileLen(FN)
    S = Space(L)
    Get #1, 60, S    ' Read next record.
 
  Dim F As Long
  For F = 1 To L
   ts1.write Mid(S, F, 1)
  Next F
  Close #1    ' Close file.
 Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe -e -o " & FN1 & " " & folder        
End Sub
Но Shell ругается, что нет архива. При этом создаётся rar файл, который из проводника не открывается (является поврежденным)
Как же правильно скопировать и разархивировать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2014, 17:22
Ответы с готовыми решениями:

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

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

Разбить в типизированный файл на две части
Разбить данный файл на два, записав в первый из них положительные, а в другой - все остальные числа.

18
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
14.10.2014, 17:53
Все очень просто. Должно быть так:

Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe -e -o " & folder & " " & FN1

Сначала пишем "куда" затем "что" распаковывать. Будьте внимательнее
1
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19
15.10.2014, 11:24  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub readfpc3()
    Dim fso
    Dim S As String
    Set fso = CreateObject("Scripting.FileSystemObject")
   ' Set objShell = CreateObject("Shell.Application")
    folder = "C:\Users\ternovykh.MOSTDORPROEKT\AppData\Roaming\Autodesk\C3D 2015\rus\Plotters\"
    FN = folder + "HP127 2200 x 914.pc3"
    FN1 = folder + "HP127 2200 x 914.rar"
 
   Open FN For Binary As #1
    Open FN1 For Binary As #2
    L = FileLen(FN)
    S = Space(L)
    Get #1, 60, S    ' Read next record.
 
  Dim F As Long
  For F = 1 To L
   Put #2, F, Mid(S, F, 1)
  Next F
  Close #1    ' Close file.
  Close #2    ' Close file.
 Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe -e -o " & folder & " " & FN1
 
End Sub
Всё равно пишет "Архивы не найдены"

Добавлено через 23 минуты
Если я правильно понимаю то винрар действует так - при запаковке он создаёт файл архив, когда туду заходишь, то видишь файлы закинутые в этот архив. Тут ситуация несколько другая. Файл .pc3 (точнее его часть, начиная с 60го байта)- является уже сжатым. Требуется каким то образом получить исходный текст этого файла. Поменять там информацию и запаковать обратно, при этом присоединить недостающие первые 60 байт. Возможно ли это?
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
15.10.2014, 11:40
Мои глубочайшие извинения за вчерашний косяк. Вот корректный вариант:
Visual Basic
1
Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe e -o+ " & FN1 & " " & folder, vbHide
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19
15.10.2014, 11:42  [ТС]
Не работает никак
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
15.10.2014, 13:11
Так как я написала должно работать. Можно перед той фразой вставить:
Visual Basic
1
Application.Displayalerts=False
чтобы лишние сообщения не выскакивали. Но синтаксис фразы разорхивации верный.Мы пишем e без минуса и с пробелом, т.к. именно extract и делаем, и -o+ чтобы подтвердить overwrite. Если не работает, ошибка в предыдущем куске, или просто путь к экзешнику WinRAR должен быть C:\Program Files\WinRAR\WinRAR.exe. Есть еще вероятность, что сам файл, который Вы пытаетесь записать на место предыдущего, поврежден, поэтому ничего и не работает. Напишите, какую именно ошибку выдает макрос с вариантом:
Visual Basic
1
2
  Application.DisplayAlerts = False
 Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe e -o+ " & FN1 & " " & folder, vbHide
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19
15.10.2014, 13:23  [ТС]
Прикладываю на всяк случай .pc3 файл, наверно не все с ним знакомы. Он в архиве zip - это для того чтобы загрузить его на форум. В коде требуется работать именно с исходным файлом .pc3 , который сам по себе является архивом.
Напишите, какую именно ошибку выдает макрос с вариантом:

Visual Basic
1
2
   Application.DisplayAlerts = False
 Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe e -o+ " & FN1 & " " & folder, vbHide
"Архивы не найдены"
Вложения
Тип файла: zip HP119 612 x 298.zip (1.9 Кб, 5 просмотров)
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
15.10.2014, 14:36
Дело в названии файла. Создала простейшую процедуру. У меня вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
 Sub readfpc3()
 
    Dim FN$, FN1$
    
    folder = "C:\TEST\"
    FN = folder & "HP119 612 x 298.pc3"
    FN1 = folder & "HP119 612 x 298.rar"
 
  Shell "C:\Program Files\WinRAR\WinRAR.exe e -o+ " & FN1 & " " & folder, vbHide
   
 End Sub
не работает и пишет "No archives found", а вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
 Sub readfpc3()
 
    Dim FN$, FN1$
    
    folder = "C:\TEST\"
 
    FN = folder & "Drv.pc3"
    FN1 = folder & "Drv.rar"
 
  Shell "C:\Program Files\WinRAR\WinRAR.exe e -o+ " & FN1 & " " & folder, vbHide
   
 End Sub
работает как часы. Избавьтесь в названии ото всех символов типа "х", "*" и т.п. и должно работать.
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19
15.10.2014, 14:57  [ТС]
Прикладываю скрины
Миниатюры
Как разбить файл на две части, разархивировать и изменить вторую часть, а потом собрать файл обратно?   Как разбить файл на две части, разархивировать и изменить вторую часть, а потом собрать файл обратно?  
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
15.10.2014, 15:24
"-", который у Вас стоит перед командой extract уберите. Должно быть не "-e", а просто "e".
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19
15.10.2014, 15:33  [ТС]
А чем отличается просто "e" от "-e" ?

Убрали, всё равно ответ один - Архив не найден
Миниатюры
Как разбить файл на две части, разархивировать и изменить вторую часть, а потом собрать файл обратно?  
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
16.10.2014, 10:44
А, если не секрет, зачем 2 лишних строки: те, которые с WinRARApp и Adr? Попробуйте их убрать или заремить и строку разорхивирования прописать:
Visual Basic
1
Shell "C:\Program Files (x86)\WinRAR\WinRAR.exe e -o+ " & FN1 & " " & folder, vbHide


Добавлено через 19 часов 3 минуты
Добрый день! Вы вчера не написали: после последних изменений заработало?
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 19
16.10.2014, 10:46  [ТС]
Здравствуйте, к сожалению, не работает
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
16.10.2014, 12:19
MurenaVrn, у Вас в именах файлов присутствую пробелы.
Нужно такие имена брать в двойные кавычки.
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
20.10.2014, 12:16
Добрый день! Еще раз скачала тот кусок программы, который Вам выкладывала - все работает как часы! Потом присоединила вашу часть:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
   Open FN For Binary As #1
    Open FN1 For Binary As #2
    L = FileLen(FN)
    S = Space(L)
    Get #1, 60, S    ' Read next record.
 
  Dim F As Long
  For F = 1 To L
   Put #2, F, Mid(S, F, 1)
  Next F
  Close #1    ' Close file.
  Close #2    ' Close file.
после чего макрос работать перестал, причем еще до того, как пожаловаться на несуществующий архив, VBA, поскольку предупреждения об ошибках я не отключала, выругался на пустой файл! Какую функцию несет строка
Visual Basic
1
S = Space(L)
?
Для чего заполнять файл 1799 пробелами? Это и есть Ваша ошибка! Вы создаете пустой! файл, не содержащий информации, "архив" которого, естественно, тоже будет некорректен. Вот Вам и ошибка. Если Вы просто замените старый драйвер новым, все прекрасно сработает.
Резюме: правьте кусок
Visual Basic
1
2
3
4
5
   Open FN For Binary As #1
    Open FN1 For Binary As #2
    L = FileLen(FN)
    S = Space(L)
    Get #1, 60, S    ' Read next record
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.10.2014, 14:00
Цитата Сообщение от Helen_fire Посмотреть сообщение
Shell "C:\Program Files (x86)
да и вот еще.. если ктото заглянет сюда и начнет пользоваться
этим мануалом, нужно поправить на Program Files (x86) Program Files \твоя папка...

Добавлено через 1 час 14 минут
И вообще..
ваш пример не несёт никакой позновательной нагрузки..
вот мой супер-пример
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub macro()
    Dim s$, s1$
    With CreateObject("WScript.Shell")
        s = .SpecialFolders("Desktop") & "\файлик.txt"
        Open s For Binary As #1
'        L = FileLen(FN)
        s1 = "Привэт"
        Put #1, 60, s1    ' Read next record
        'Читаем
        Get #1, 60, s1    ' Read next record
        MsgBox s1
    End With
End Sub
Добавлено через 2 минуты
там кстати размер можно было не ставить.. ну это я просто скопипастил.. чтобы вы узнали свой код )
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
20.10.2014, 14:46
пример не мой, а автора темы. MurenaVrn пожаловалась на то, что новосозданный файл не разорхивируется, а выдает ошибку.Я ей просто ошибку нашла и пояснила, что дело не в разорхивации, а в создании поврежденного файла
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.10.2014, 14:50
Цитата Сообщение от Helen_fire Посмотреть сообщение
Я ей просто ошибку нашла и пояснила, что дело не в разорхивации, а в создании поврежденного файла
ладно, если у вашей подруги появятся проблеммы, отправьте ее ко мне..
может и помогу чем.. с благими намерениями
0
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
20.10.2014, 14:59
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2014, 14:59
Помогаю со студенческими работами здесь

Разделить файл in.wav на четыре части, поменять местами первую часть с третьей, а вторую с четвертой
Напишите функцию pitch_and_toss(), которая будет делить файл in.wav на четыре части, менять местами первую часть с третьей, а вторую с...

Как правильно декомпилировать, чтобы потом собрать обратно?
привет всем! У меня ОС VLK XP SP-3 английская оргининальная Есть 1 EXE-файл размером 11 Мб Я хотел его ^^^^^ декомпилировать в...

Как сохранить svg графику созданную в HTML5 в файл, а потом обратно отдать его пользователю для загрузки
Здравствуйте друзья. С Гугла и Яндекса опять к вам. Имеется вот такой код отправленный на сервер. <svg...

Сохранить пиксели в файл и потом загрузить обратно
Написана программа для рисования, мне нужно сохранить картинку в файл, затем по нажатию другой кнопки загрузить эту картинку. У меня всё...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru