![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() В программе сохраняю на флэшку изображение так
Код:
Image1.Picture.SaveToFile('F:\Image.bmp'); Картинка доволньно большая 2048x1448 пикселей и сохранение длится 2-3 секунды. Если в момент сохранения выдернуть флэшку, то программа подвисает. Как сделать так, чтобы при выдергивании флэшки программа не подвисала, а выдавала бы сообщение о том, что файл не удалось сохранить. Как программно решить эту задачу? Надеюсь на вашу помощь. |
#2
|
||||
|
||||
![]() Как вариант копировать "блоками"
там используется поток окпирования. Если поток обрывается - выводить сообщение. |
#3
|
|||
|
|||
![]() А можно подробнее про копирование блоками - как можно сохранить картинку Image1 блоками на флешку?
|
#4
|
||||
|
||||
![]() Ну на счет блоков - надо делить изображение на более мелкие, и передавать по маленьким чатям, а уже потом их "соединять", но я думаю в вашем случае помогут Try Except, тобишь, пример:
Код:
Try Image1.Picture.SaveToFile('F:\Image.bmp'); Except Raise Exceptions.Create('Ошибка! скопировать картинку не удалось!'); end; Помогаю за Спасибо ![]() |
#5
|
|||
|
|||
![]() Сейчас попробую.
UPD. Try-Except не помогло - все равно программа подвешивается... Я уверен, что есть решение, но ума не приложу - как это сделать. UPD. Только что пришла такая идея в голову - если сохранить Image1 на жесткий диск компьютера, а уже при помощи средств Windows копировать изображение на флешку. Только как это сделать? Я не силен в этом. Последний раз редактировалось kiman.ru, 08.10.2010 в 17:41. |
#6
|
||||
|
||||
![]() Не не не не, не извращайся.
Сейчас найду чтатью про блоки... ![]() Вот тут информация выкачивания файла из инета, и тут исключительная ситуация обрыва обрабатывается http://sources.codenet.ru/download/1012/gets.html если мне память не изменяет... Сейчас найду что касается локальных "переносов" http://www.delphibasics.ru/BlockWrite.php А вот ссылка, на инфомрацию по Read и Write block Последний раз редактировалось Uniq!, 08.10.2010 в 18:00. |
#7
|
||||
|
||||
![]() Вот то, что ты хочешь (как ты предложил):
Код:
image1.picture.savetofile('C:\1.bmp'); try copyfile('C:\1.bmp', 'F:\1.bmp', true); except showmessage('error!'); end; Помогаю за Спасибо ![]() |
#8
|
||||
|
||||
![]() Попробуй сделать в таком ключе:
Код:
... 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; ... |