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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 16:29   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Печаль base64 to file

проблема. у меня есть строка в виде base64 из этого надо сделать файл.
по сути это картинка (но не факт)

че я делаю:
Код:
uses EncdDecd;
...
var st,st2:TMemoryStream;
begin
st:=TMemorystream.Create;
st2:=TMemorystream.Create;
st.WriteBuffer(Pointer(edit1.Text)^, Length(edit1.Text)); //загоняю строку в стрим
DecodeStream(st,st2); //перекодировка из base64
st2.SaveToFile('image.jpg');
файл получается размером 0 байт. то есть во второй стрим ни че не записалось почему то... странно а если строку загружаю из файла то работает:

Код:
var st,st2:TMemoryStream;
begin
st:=TMemorystream.Create;
st2:=TMemorystream.Create;
st.LoadFromFile('image.txt');
DecodeStream(st,st2); //перекодировка из base64
st2.SaveToFile('image.jpg');
че я делаю не так?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 06.04.2011, 16:31   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var st,st2:TMemoryStream;
s:string;
begin
st:=TMemorystream.Create;
st2:=TMemorystream.Create;
s=edit1.text;
st.WriteBuffer(s[1],Length(s)*SizeOf(Char)); //загоняю строку в стрим
DecodeStream(st,st2); //перекодировка из base64
st2.SaveToFile('image.jpg');
не надо делать указатель из чего попало.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 06.04.2011 в 16:34.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.04.2011, 16:32   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

в первом случае st не пуст это точно. так как если сделать так st.SaveToFile('img.txt'); то полученный файл будет содержать строку base64
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 06.04.2011, 16:35   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я немного исправил, попробуйте.
а насчет в файл, то один кривой байт мог все испортить, причем в тексте могло выглядить и нормально.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.04.2011, 16:39   #5
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

st.WriteBuffer(s[0],Length(s)*SizeOf(Char)); //загоняю строку в стрим

косяк... че то не так... первый аргумент не подходит

я не очень соображаю в потоках

решил на бум исправить
st.WriteBuffer(s,Length(s)*SizeOf(C har));
не работает но компилится
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 06.04.2011 в 16:41.
Лубышев вне форума Ответить с цитированием
Старый 06.04.2011, 16:45   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

s[1] там надо, я ж поправил.

кстати а почему б TStringStream не взять?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.04.2011, 16:47   #7
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

я заметил тока все равно размер полученного файла 0
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 06.04.2011, 16:48   #8
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
s[1] там надо, я ж поправил.

кстати а почему б TStringStream не взять?
а не знаю как умею так и делаю лишь бы заработало
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 06.04.2011, 16:56   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Вроде нет re-Position.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 06.04.2011, 17:06   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

блин, ну точно
st.Position:=0;
после записи то надо делать.(LoadFromFile это делает)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём разница между unit, header file, cpp file? TwiX Общие вопросы C/C++ 6 29.04.2012 19:49
Base64 GoldmasteR Общие вопросы Delphi 10 06.01.2011 18:37
base64 beemoto Общие вопросы Delphi 0 24.04.2010 21:58
base64 Dimarik Win Api 0 10.04.2010 18:59
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30