Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.10.2010, 17:03
kiman.ru kiman.ru вне форума
Новичок
 
Регистрация: 11.02.2010
Сообщения: 63
Репутация: 10
По умолчанию Сохранение на флэшку

В программе сохраняю на флэшку изображение так
Код:
Image1.Picture.SaveToFile('F:\Image.bmp');

Картинка доволньно большая 2048x1448 пикселей и сохранение длится 2-3 секунды. Если в момент сохранения выдернуть флэшку, то программа подвисает. Как сделать так, чтобы при выдергивании флэшки программа не подвисала, а выдавала бы сообщение о том, что файл не удалось сохранить. Как программно решить эту задачу?

Надеюсь на вашу помощь.
Ответить с цитированием
  #2  
Старый 08.10.2010, 17:12
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Как вариант копировать "блоками"
там используется поток окпирования. Если поток обрывается - выводить сообщение.
Ответить с цитированием
  #3  
Старый 08.10.2010, 17:19
kiman.ru kiman.ru вне форума
Новичок
 
Регистрация: 11.02.2010
Сообщения: 63
Репутация: 10
По умолчанию

А можно подробнее про копирование блоками - как можно сохранить картинку Image1 блоками на флешку?
Ответить с цитированием
  #4  
Старый 08.10.2010, 17:23
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну на счет блоков - надо делить изображение на более мелкие, и передавать по маленьким чатям, а уже потом их "соединять", но я думаю в вашем случае помогут Try Except, тобишь, пример:

Код:
  Try
    Image1.Picture.SaveToFile('F:\Image.bmp');
  Except
    Raise Exceptions.Create('Ошибка! скопировать картинку не удалось!');
  end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 08.10.2010, 17:31
kiman.ru kiman.ru вне форума
Новичок
 
Регистрация: 11.02.2010
Сообщения: 63
Репутация: 10
По умолчанию

Сейчас попробую.

UPD.

Try-Except не помогло - все равно программа подвешивается...

Я уверен, что есть решение, но ума не приложу - как это сделать.

UPD.

Только что пришла такая идея в голову - если сохранить Image1 на жесткий диск компьютера, а уже при помощи средств Windows копировать изображение на флешку. Только как это сделать? Я не силен в этом.

Последний раз редактировалось kiman.ru, 08.10.2010 в 17:41.
Ответить с цитированием
  #6  
Старый 08.10.2010, 17:55
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Не не не не, не извращайся.
Сейчас найду чтатью про блоки... 5 минут погодите

Вот тут информация выкачивания файла из инета, и тут исключительная ситуация обрыва обрабатывается
http://sources.codenet.ru/download/1012/gets.html
если мне память не изменяет...

Сейчас найду что касается локальных "переносов"

http://www.delphibasics.ru/BlockWrite.php
А вот ссылка, на инфомрацию по Read и Write block

Последний раз редактировалось Uniq!, 08.10.2010 в 18:00.
Ответить с цитированием
  #7  
Старый 08.10.2010, 17:58
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Вот то, что ты хочешь (как ты предложил):
Код:
image1.picture.savetofile('C:\1.bmp');
try
copyfile('C:\1.bmp', 'F:\1.bmp', true);
except showmessage('error!');
end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #8  
Старый 08.10.2010, 20:36
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Попробуй сделать в таком ключе:
Код:
...
const
  Buff_Size = 4096;
var
  mS: TMemoryStream;
  fS: TFileSteam;
  Buff: array[1..Buff_Size] of Byte;
  readedLength: Integer;
begin
  mS := TMemoryStream.Create;
  Image1.Picture.BitMap.SaveToStream(mS);
  try
    fS := TFileSteam.Create('путь + имя файла', fmCreate);
    repeat
      readedLength := mS.Read(Buff, Buff_Size);
      fS.Write(Buff, readedLength);
    until readedLength < Buff_Size;
    fS.Free;
  except
    ...ERROR!!!!
  end;
  mS.Free;
end;
...
Писал на коленке. Не тестировал. Но по идее должно работать.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:38.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025