|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.10.2007, 19:02 | #1 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 266
|
проблемы с TFileStream
У меня опять проблемы с TFileStream. Почему, когда я записываю:
var i,int:integer; fs:TFileStream; Str:string[255]; ms:TMemoryStream; int6:int64; begin TPicture(TrVwObject.Items.Item[i].Data).Bitmap.SaveToStream(ms); int6 := ms.Size; fs.Write(int6, sizeof(int6)); fs.CopyFrom(ms,0); end эта картинка в файл записывается. А когда я считываю fs.Read(str, sizeof(str)); fs.Read(int6, sizeof(int6)); ms.CopyFrom(fs, 0); int6:=ms.Size; Pic:=TPicture.Create; Pic.Bitmap.LoadFromStream(ms); with Form1.TrVwObject.Items.Add(nil, str) do Data := Pic; то в ms ничего нет!!! А картинка "равна нулю" |
24.10.2007, 19:21 | #2 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 266
|
Что-то ничего не получается
|
24.10.2007, 19:50 | #3 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
а кто память будет выделять ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
26.10.2007, 20:07 | #4 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 266
|
В смысле память выделять? под что?
|
26.10.2007, 20:30 | #5 |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
|
26.10.2007, 20:37 | #6 |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
Вообще лучше расскажите в какой последовательности вы хотите сохранять в файл данные, потому что из вашего кода это не совсем ясно. Если я правильно телепатировал и формат такой:
str - 256 байт size - 8 байт Picture - xxx байт то непонятно зачем такие извращения? Или у вас файле хранится несколько таких структур? |
26.10.2007, 20:53 | #7 |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
В общем, если несколько структур, то код примерно такой:
procedure SaveDataToFileStream(Fs: TFileStream; Bitmap: TBitmap; Name: String); var Ms: TMemoryStream; Size: Integer; begin // Пишем длину имени Size:=Length(Str); Fs.WriteBuffer(Size,SizeOf(Integer) ); // Пишем само имя Fs.WriteBuffer(PChar(Name)^,Size); // Пишем данные Ms:=TMemoryStream.Create; try Bitmap.SaveToStream(Ms); Size:=Ms.Size; // Сначала пишем длину данных Fs.WriteBuffer(Size,SizeOf(Integer) ); // Теперь сами данные Ms.Seek(0,soFromBeginning); Fs.CopyFrom(Ms,Size); finally Ms.Free; end; end; procedure LoadDataToFileStream(Fs: TFileStream; Bitmap: TBitmap; var Name: String); var Ms: TMemoryStream; Size: Integer; begin // Читаем длину имени Fs.ReadBuffer(Size,SizeOf(Integer)) ; // Читаем само имя SetLength(Name,Size); Fs.ReadBuffer(PChar(Name)^,Size); // Читаем данные Ms:=TMemoryStream.Create; try // Читаем длину данных Fs.ReadBuffer(Size,SizeOf(Integer)) ; // Сами данные Ms.CopyFrom(Fs,Size); // Теперь загружаем их в Bitmap Bitmap.LoadFromStream(Ms); finally Ms.Free; end; end; Код в среде не проверял, писал на коленке. Если опечатался - исправьте. |
26.10.2007, 20:56 | #8 |
Пользователь
Регистрация: 26.10.2007
Сообщений: 79
|
Так и есть, опечатался как минимум один раз. Исправляюсь:
procedure LoadDataToFileStream(Fs: TFileStream; Bitmap: TBitmap; var Name: String); var Ms: TMemoryStream; Size: Integer; begin // Читаем длину имени Fs.ReadBuffer(Size,SizeOf(Integer)) ; // Читаем само имя SetLength(Name,Size); Fs.ReadBuffer(PChar(Name)^,Size); // Читаем данные Ms:=TMemoryStream.Create; try // Читаем длину данных Fs.ReadBuffer(Size,SizeOf(Integer)) ; // Сами данные Ms.CopyFrom(Fs,Size); // Теперь загружаем их в Bitmap Ms.Seek(0,soFromBeginning); Bitmap.LoadFromStream(Ms); finally Ms.Free; end; end; |
01.11.2007, 20:00 | #9 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 266
|
Спасибо большое! 2 недели мучился, ничего не получалось - а тут все работает! respect вам, чуваки!!!
|
01.11.2007, 20:44 | #10 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Это из описания метода. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с record,string,TFileStream | AngelOfDeath | Общие вопросы Delphi | 6 | 31.05.2008 11:24 |
Передача функции TServerSocket и TFileStream | dns-s | Работа с сетью в Delphi | 2 | 26.03.2008 21:15 |
сохранение изображения с TFileStream | andrey4623 | Общие вопросы Delphi | 10 | 20.10.2007 20:28 |
Проблемы с DLL | Дмитрий2006 | Общие вопросы C/C++ | 5 | 15.10.2007 12:43 |
TFilestream | UnD)eaD)Snake | Win Api | 1 | 27.09.2007 21:22 |