Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TIniFile->WriteBinaryStream не работает! 
V
    Опции темы
BOB4uK
  Дата 4.8.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 28.2.2004

Репутация: нет
Всего: нет



Пипл мне нужно сохранить картинку из Image в ini файл!
Я пишу так:
Код

  TIniFile *ini=new TIniFile("C:\\test.ini");

  TMemoryStream *s=new TMemoryStream();

  Image1->Picture->Bitmap->SaveToStream(s);
  s->Position = 0;

  ini->WriteBinaryStream("image","value",s);

  delete ini;
  delete s;


При попытке записать в файл он выводит ошибку...

Добавлено через 5 минут и 17 секунд
Странно! с Memo работает на ура!
В чем дело кто знает?
PM MAIL ICQ   Вверх
Rrader
  Дата 4.8.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



BOB4uK, в Image->Picture->Bitmap точно .BMP находится? Не .GIF или .JPG?
Попробуй с Graphic работать.
Код

Image1->Picture->Graphic->SaveToStream(s);


Это сообщение отредактировал(а) Rrader - 4.8.2008, 17:13


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
BOB4uK
Дата 4.8.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 28.2.2004

Репутация: нет
Всего: нет



Да точно BMP!
А Graphic не зависит от формата?

Добавлено через 1 минуту и 28 секунд
Неа так тоже не работает!  smile 
PM MAIL ICQ   Вверх
Rrader
  Дата 4.8.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



А что за ошибка?


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
BOB4uK
Дата 4.8.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 28.2.2004

Репутация: нет
Всего: нет



Вот ошибка:
Unable to write to C:\test.ini

Может это ограничение при работе с ini-файлами?
PM MAIL ICQ   Вверх
gather
Дата 4.8.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Rescue Officer
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 13.6.2007
Где: Russia, Lipetsk

Репутация: нет
Всего: 4



Файл C:\test.ini существует? Доступен на запись?
PM MAIL WWW Skype GTalk Jabber   Вверх
THandle
Дата 4.8.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



BOB4uK, Vista? Системный диск куда установлена Windows? Туда так просто записать не получится без прав...

Попробуй в другой каталог записать вариант с Graphics, работает, НО:


TIniFile->Read Binary Stream

Цитата

Note: When used a Windows  .ini file, ReadBinaryStream is limited to 1023 characters.



Записать то большие данные получится - а прочитать - нет, только 1023 байта.
PM   Вверх
BOB4uK
Дата 5.8.2008, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 28.2.2004

Репутация: нет
Всего: нет



Хорошо! тогда как можно записать этот поток в свой текстовый файл, куданибудь в середину (например в начале справ инфа моя, потом картинка, потом еще инфа...)?
PM MAIL ICQ   Вверх
Rrader
  Дата 5.8.2008, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Цитата(BOB4uK @  5.8.2008,  01:24 Найти цитируемый пост)
Unable to write to C:\test.ini

Функция WritePrivateProfileString падает - видимо, слишком большая картинка.

Цитата(BOB4uK @  5.8.2008,  11:05 Найти цитируемый пост)
тогда как можно записать этот поток в свой текстовый файл, куданибудь в середину (например в начале справ инфа моя, потом картинка, потом еще инфа...)?

Записать сначала размер данных, а затем сами данные как массив.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
BOB4uK
Дата 5.8.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 28.2.2004

Репутация: нет
Всего: нет



Записываю размер, а потом данные по байтово! Сохраняет нормально! Но читает почему то только низ, а верх серый...
Код

//запись
  FILE *f=fopen("C:\\Temp\\ini\\test.txt","w");

  AnsiString s="Yes!!!\n";
  fprintf(f,s.c_str());

  TMemoryStream *val=new TMemoryStream(),*tmp=new TMemoryStream();
  Image1->Picture->Bitmap->SaveToStream(val);

  s=val->Size; s+="\n";
  fprintf(f,s.c_str());

  char ch[4];
  int i,q=val->Size;
  for (i=0;i<q;i+=4)
  {
    val->Position=i;
    val->Read(ch,4);

    fwrite(ch,sizeof(ch),1,f);
  }

  fclose(f); 


Код

//чтение
  AnsiString s;
  TMemoryStream *val=new TMemoryStream(),*tmp=new TMemoryStream();
  FILE *f=fopen("C:\\Temp\\ini\\test.txt","r");
  char ch[128],*sim;
  int Len;
  fgets(ch,128,f);
  Len=strlen(ch); sim=&ch[Len-1]; *sim=0;
  s=ch;
  fgets(ch,128,f);
  Len=strlen(ch); sim=&ch[Len-1]; *sim=0;
  long long count=StrToInt(ch);
  int i;
  char c[1];
  val->Position=0;
  for (i=0;i<count;i++)
  {
    fread(c,sizeof(c),1,f);
    val->Write(c,1);
  }
  val->Position=0;
  Image2->Picture->Bitmap->LoadFromStream(val);
  fclose(f);


Маленького размера читает а вот по больше 200*120пкс с низу только полосочка цветная а остальное серое...
PM MAIL ICQ   Вверх
BOB4uK
Дата 6.8.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 28.2.2004

Репутация: нет
Всего: нет



Нашел проблему!
Старое:
Код

FILE *f=fopen("C:\\Temp\\ini\\test.txt","w");
FILE *f=fopen("C:\\Temp\\ini\\test.txt","r");

новое:
Код

FILE *f=fopen("C:\\Temp\\ini\\test.txt","wb");
FILE *f=fopen("C:\\Temp\\ini\\test.txt","rb"";


Добавлено через 1 минуту и 7 секунд
Рас записываю двоичные данные следовательно и формат файла такой же должен быть...
Вот!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.