|
Тема
|
Много файлове <--> един файл
|
|
Автор |
microsoft (член) |
Публикувано | 19.06.05 15:59 |
|
Привет,
значи трябва ми следното:
Имам най-различни файлове - exe/dll/jpg/doc/gif/txt/xls/ocx ... - може да са всякакви.
Искам да събера механично няколко от тях в един общ файл. После от тоя общ файл да мога да извадя всеки от файловете съдържащи се в него, и да го запазя като отделен, напълно функциониращ файл, работещ точно като оригинала.
Т.е имам примерно test.exe, pic.jpg, blah.txt - от всичките тях правя един файл, примерно files.all.
После от files.all да мога да извлека и запазя отново като отделен файл всичките test.exe, pic.jpg, blah.txt заедно или само който (които) и да е от тях.
Трябва ми точно това, а не примерно да правя зип от всичките и после да вадя файлове от зип-а.
Може да има отделен тхт файл в който се пази информация къде започва и свършва всеки от файловете във files.all
От известно време се мъча без грам резултат(положителен де), дайте акъл.
Благодаря!
| |
Тема
|
Re: Много файлове <--> един файл
[re: microsoft]
|
|
Автор |
Щиpлиц (разузнавач) |
Публикувано | 20.06.05 02:00 |
|
Странно желание, след като има толкова много работещи от команден ред архиватори. Но... wish is law!
Ето един прост метод на четене и запис на произволно място във файл, та било то и Files.all. ;о)
Private Sub subRead()
Dim intStart As Long
Dim intLenght As Long
Dim strBytes As String
intStart = 1
intLenght = 32493
Open "files.all" For Binary As #1
strBytes = Space(intLenght)
Get #1, intStart, strBytes
Close #1
If Dir("files.exe") <> "" Then Kill "files.exe"
Open "files.exe" For Binary As #1
Put #1, , strBytes
Close #1
intStart = 32494
intLenght = 263512
Open "files.all" For Binary As #1
strBytes = Space(intLenght)
Get #1, intStart, strBytes
Close #1
If Dir("files.jpg") <> "" Then Kill "files.exe"
Open "files.jpg" For Binary As #1
Put #1, , strBytes
Close #1
End Sub
Private Sub subWrite()
Dim intStart As Long
Dim strBytes As String
Open "files.jpg" For Binary As #1
strBytes = Space(LOF(1))
Get #1, , strBytes
Close #1
intStart = 32494
Open "files.all" For Binary As #1
Put #1, intStart, strBytes
Close #1
End Sub
... проследи кога и как се променят стойностите на intStart и intLenght и strBytes преди четене и запис. Опитай да разбереш защо... а пък самите числа къде ще ги държиш - трябва да помислиш по въпроса. Може в последователен текстов файл, може в INI, може в регистъра даже... може и в самия files.all да бъдат, но трябва да си заделяш допълнително място в него. Важно е да се знае, че когато пишеш във файла files.all на място започващо от 314432 байт, и записваш вътре да кажем 293812 байта - няма значение колко е дълъг файла files.all, ако е по-дълъг - ще се променят само тези 293812 байта, а ако е по-малък - тогава ще се промени дължината му с толкова байтове, колкото са нужни за да се събере всичко, дето искаш да запишеш. Но старите байтове на мястото започващо от 314432-рия байт - се губят. Затова, ако там е имало по-малък файл, и след него други файлове, ... ако запишеш новия по-голям файл - тогава ще промениш съдържанието и на следващия файл, който няма никаква вина за цялата работа... (горкият).
На мнение съм, че не трябва да си усложняваш живота с тези глупости. Просто използвай един ARJ от конзола, и го управлявай с Shell.
Щирлиц
| |
Тема
|
Re: Много файлове <--> един файл
[re: Щиpлиц]
|
|
Автор |
microsoft (член) |
Публикувано | 20.06.05 18:46 |
|
thnx!
сега почвам да го разучавам :)
| |
Тема
|
Re: Много файлове <--> един файл
[re: microsoft]
|
|
Автор | VBProgrammer (Нерегистриран) |
Публикувано | 20.06.05 18:56 |
|
По едно време цивилизования метод за това беше: LoadResource
| |
|
|
|
|