On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 4631
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.12.15 20:00. Заголовок: Хранение *.zip файлов в базе ?


Сделал запись zip-файлов в мемо-поля базы (драйвер DBFCDX).
Файлы записываются без ошибок, только после извлечения из мемо-поля - архив становиться "битым" и не распаковывается.
Как победить это ?
Или нужно другую базу использовать ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]


администратор




Пост N: 5445
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.12.15 22:38. Заголовок: Andrey Ну накосячил..


Andrey
Ну накосячил видимо..........
Пример сложно было дать ?
 
local a
request DBFCDX
dbcreate("test",{{"mmm","m",10,0}},"DBFCDX",.t.,"TEMP")
TEMP->(dbappend())
a:=filestr("test.zip")
TEMP->mmm:=a
close all

use test alias TEMP new
strfile(TEMP->mmm,"test1.zip")
close all


if hb_md5file("test.zip")==hb_md5file("test1.zip")
? "ok"
else
? "bad"
endif



PS
У мну выдало OK
ZIP я считывал реальный.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4632
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.15 01:54. Заголовок: Dima пишет: Пример ..


Dima пишет:

 цитата:
Пример сложно было дать ?


Дя я не знал....
Выкладываю целиком его на МиниГуи. https://cloud.mail.ru/public/8MDq/upmSqF2xn
У меня база открывается так:
USE .... CODEPAGE "RU866" VIA "DBFCDX" NEW EXCLUSIVE
MD5 проверяю до загрузки в базу и после записи. У меня не совпадает.
Что-то наверно обрезается при записи. Может с этим связано ?



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5446
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.12.15 10:07. Заголовок: Попробовал и с RU866..


Попробовал и с RU866 и заюзал те же функции как у тебя
Вместо filestr -> HB_MEMOREAD
Вместо strfile -> HB_MemoWrit
Результат тот же , все OK

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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4634
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.15 17:53. Заголовок: Dima пишет: Я бы на..


Dima пишет:

 цитата:
Я бы на твоем месте затестил это дело на простом примере типа моего и после того
как будет достигнут положительный результат , портировал в Minigui.



Подозреваю разное использование функций в Zip (у тебя Харбор, а у меня в МиниГуи другая библиотека используется).
А почему мой пример не идёт ? Где косяк ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5450
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.12.15 17:58. Заголовок: Андрей а при чем тут..


Андрей а при чем тут функции ZIP вообще ?
В моем примере их нет совсем.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4636
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.15 18:04. Заголовок: Dima пишет: Андрей ..


Dima пишет:

 цитата:
Андрей а при чем тут функции ZIP вообще ?
В моем примере их нет совсем.



Может и не причём...


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5451
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.12.15 18:05. Заголовок: возьми мой пример и ..


возьми мой пример и подсунь ему свой ZIP и глянь результат.
в конце примера только добавь Ferase("test1.zip")

PS
Кстати ,если сложишь куда ни будь свой ZIP на котором не сходится MD5 ,
я проверил бы у себя.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4637
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.12.15 19:06. Заголовок: Dima пишет: Кстати ..


Dima пишет:

 цитата:
Кстати ,если сложишь куда ни будь свой ZIP на котором не сходится MD5 ,
я проверил бы у себя.


Запусти мой проект - у тебя получиться тоже самое что и у меня. Битые zip из текстовых файлов.
Там проект короткий и простой, все файлы из папки FR3 архивируются в zip и далее пишутся в мемо-поле.
Потом из мемо-поля пишу в файл (он уже становится битым) и пытаюсь разархивировать.
Просто у тебя один файл, а я делаю несколько файлов.

Я забыл уже, а как работать с базой где BLOB поля можно использовать ? Подскажи пожалуйста ссылку.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5452
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.12.15 23:36. Заголовок: Andrey пишет: Я заб..


Andrey пишет:

 цитата:
Я забыл уже, а как работать с базой где BLOB поля можно использовать ? Подскажи пожалуйста ссылку.


Поиск по форуму по слову BLOB.
Далее "фильтруй" то что нашел.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3397
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.12.15 08:18. Заголовок: В примере устанавлив..


В примере устанавливается кодовая страница 1251, а dbf открывается с 866-й. При этом в операциях с dbf выполняется перекодировка по кодовым страницам

Надо заменить тип поля с memo

AADD( aDbf , {"FMEMO" ,"M", 10,0 } )

на BLOB:

AADD( aDbf , {"FMEMO" ,"W", 4,0 } )

и тогда перекодировка выполняться не будет.

Другой вариант - открывать dbf без указания codepage

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4639
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.12.15 13:57. Заголовок: Спасибо БОЛЬШОЕ Pash..


Спасибо БОЛЬШОЕ Pasha !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4642
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.01.16 19:47. Заголовок: Нашёл ещё один вариа..


Нашёл ещё один вариант.

Делаю сжатие строки и конвертирую строку MIME, а потом записываю в мемо-поле:
cBuff := HB_MemoRead(cFile)
cPackBuff := ZipCompress( cBuff ) // изпользую HB_Compress(cBuff) из xHarbour Language Reference Guide
// ---- для любителей всё шифровать ----
//cPackBuff := HB_Crypt( cPackBuff, "Мой_пароль" )
cBuff64 := HB_Base64Encode( cPackBuff, LEN(cPackBuff) )
FIELD->FMEMO := cBuff64

Обратные действия:
cBuff64 := FIELD->FMEMO
cPackBuff := HB_Base64Decode( cBuff64 )
cBuff := ZipUncompress( cPackBuff ) // изпользую HB_Uncompress() из xHarbour Language Reference Guide
// ---- для любителей всё шифровать ----
// cBuff := HB_DeCrypt( cBuff, "Мой_пароль" )
HB_MemoWrit( PATH_TEST + cFile, cBuff )


Так как строки пакуются, база меньше раза в 1.5 - 2 !
Пробовал ехе-ник на 17Мб - тоже хорошо пишется в/из базы.
Можно теперь хранить любые данные в базах и для LetoDB !

Выкладываю исходник - https://cloud.mail.ru/public/Cp97/yM2KA9ba3
Используются функции: MsgLog(), DirEval(), ZipCompress(), ZipUncompress(), HB_Base64Encode(), HB_Base64Decode()


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4644
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.01.16 21:05. Заголовок: Вопрос по базе созре..


Вопрос по базе созрел.
Стоит ли создавать индексный файл для базы примерно в 100 - 150 записей ?
Нужен только поиск по базе типа: LOCATE FOR UPPER(FIELD->FNAME) == PADR("TEST.TXT",65)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7549
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.09.23 22:00. Заголовок: Пытаюсь иконки и bmp..


Пытаюсь иконки и bmp превратить в текстовые данные для помещения в коде программы.
Делаю как раньше
   cFile := "res\Hmg_2dbf64.ico" 
cBuff := HB_MemoRead(cFile)
cRes := hb_Base64Encode( cBuff, Len( cBuff ) )
? cFile
? 'cBuff := "' + cRes + '"'

или так
   cFile := ChangeFileExt( cFile, '.txt' ) 
HB_MemoWrit( cFile, cRes )

Получаю в переменной cRes возврат каретки (знак CRLF) и строка cRes не в одной строке. Почему ?

Сделал на сайте https://www.base64encode.net/file-to-base64
Переменная без CRLF

В хХарборе есть функции HB_Base64DecodeFile() и HB_Base64EncodeFile()
А в Харборе как они называются ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7550
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.09.23 01:57. Заголовок: С первым вопросом пр..


С первым вопросом проехали, разобрался.
Вместо  
cRes := hb_Base64Encode( cBuff, Len( cBuff ) )
надо
cRes := hb_Base64Encode( cBuff )

Тогда не будет возврата каретки (знак CRLF) в строке.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1666
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.09.23 09:33. Заголовок: Andrey пишет: Пытаю..


Andrey пишет:

 цитата:
Пытаюсь иконки и bmp превратить в текстовые данные для помещения в коде программы.
Делаю как раньше
cFile := "res\Hmg_2dbf64.ico"
cBuff := HB_MemoRead(cFile)


А почему hb_memoread? Она ж вроде для текстовых файлов предназначена, не? Иконки и бмп - не текстовые.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7807
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.09.23 11:38. Заголовок: PSP пишет: А почему..


PSP пишет:

 цитата:
А почему hb_memoread?


Тоже использую её для PNG файлов ->hb_Base64Encode с последующей передачей
через socket , проблем не было

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1667
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.09.23 13:20. Заголовок: Dima пишет: Тоже ис..


Dima пишет:

 цитата:
Тоже использую её для PNG файлов ->hb_Base64Encode с последующей передачей
через socket , проблем не было


Ну, х.з.)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7808
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.09.23 13:30. Заголовок: PSP пишет: Ну, х.з...


PSP пишет:

 цитата:
Ну, х.з.)


ну я тоже так думал как ты и поэтому сделал тестик типа
 
hb_memowrit( "test2.png",HB_MemoRead( "test.png" ) )

всё путем
ни один байт не пострадал ))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1668
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.09.23 13:39. Заголовок: Ладно-ладно, я ж не ..


Ладно-ладно, я ж не спорю

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7551
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.09.23 13:39. Заголовок: PSP пишет: А почему..


PSP пишет:

 цитата:
А почему hb_memoread? Она ж вроде для текстовых файлов предназначена, не? Иконки и бмп - не текстовые.


Самое простое... Давно использую.

В хХарборе есть функции HB_Base64DecodeFile() и HB_Base64EncodeFile()
А в Харборе как они называются ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7809
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.09.23 13:44. Заголовок: Andrey пишет: В хХа..


Andrey пишет:

 цитата:
В хХарборе есть функции HB_Base64DecodeFile() и HB_Base64EncodeFile()


Свои напиши..

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4395
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.09.23 14:13. Заголовок: Особо и писать не на..


Особо и писать не надо
 
#translate _Base64EncodeFile( <cFile> ) => hb_Base64Encode( hb_MemoRead( <cFile> ) )
#translate _Base64DecodeFile( <cFile> , <cBuff> ) => hb_MemoWrit( <cFile>, hb_Base64Decode( <cBuff> ) )
или
#translate _Base64DecodeFile( <cBuff> , <cFile> ) => hb_MemoWrit( <cFile>, hb_Base64Decode( <cBuff> ) )


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7552
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.09.23 17:23. Заголовок: SergKis пишет: Особ..


SergKis пишет:

 цитата:
Особо и писать не надо


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 703
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.09.23 13:01. Заголовок: Для хранения иконок,..


Для хранения иконок, звуков и прочих двоичных данных давно придуманы "ресурсы", которые зашиваются в тело exe-шника программы.

Погуглите в сторону hb_gtInfo( HB_GTI_ICONRES, "icon_name" ) - наверняка, это окажется удобнее, чем бинарный файл переводить в Base64 и внедрять его в код программы.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7569
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.09.23 14:54. Заголовок: Sergy пишет: это ок..


Sergy пишет:

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


Это просто ещё ОДИН способ хранения ресурсов.
И не я его придумал, посмотри библиотеку МиниГуи там есть уже такое.
Например TsBrowse.

Sergy пишет:

 цитата:
Для хранения иконок, звуков и прочих двоичных данных давно придуманы "ресурсы", которые зашиваются в тело exe-шника программы.


Не всегда это удобно, ехе-ник сильно раздувается. У меня уже 20 Мб ресурсов, всякие иконки для программы.
Это много и неудобно, лучше иметь отдельную отдельную библиотеку myResource.dll для таких целей.
А печатные формы формата xml вообще держу в dbf с мемо полем, чтобы не было кучи файлов.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4117
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 24.09.23 20:35. Заголовок: Так если проект сост..


Так если проект состоит из одного exe-шника, то ресурсы разумнее хранить именно в нем. Если это много exe-шников, которые используют одни и те же данные, то есть смысл их выделить в отдельную dll

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1673
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 24.09.23 20:39. Заголовок: Andrey пишет: У мен..


Andrey пишет:

 цитата:
У меня уже 20 Мб ресурсов


Ты ж с готовностью собрался загонять 350Мб данных в память, причем бесконтрольно, а 20Мб, которые будут под контролем менеджера памяти, тебя смущают. Странно...))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4404
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.09.23 21:42. Заголовок: Pasha Если это много..


Pasha
 цитата:
Если это много exe-шников, которые используют одни и те же данные, то есть смысл их выделить в отдельную dll


Или поместить несколько иконок в тело lib и не думать об этих иконках. Перетащил в ресурсы нового exe их ? Или та ли версия dll у клиента, и с теми иконками.
 цитата:
Это просто ещё ОДИН способ хранения ресурсов.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 676
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет