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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.11.2010, 20:20   #1
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию Ошибка сохранения TMemoryStream

Добрый вечер!
Как ни странно, но по этой теме ничего не нашёл ни в гугле, ни в DRKB, ни здесь.

Ситуация такая: Сохраняю TMemoryStream в файл процедурой SaveToFile. Всё отлично, всё работает, но нужно отлавливать ошибки сохранения. Ну если файл "только для чтения" или нету прав на запись и все подобные вещи. Пользуюсь конструкцией:
Код:
try
  OutputFile.SaveToFile(FileName);
except
  ShowMessage('Невозможно сохранить файл');
end;
Всё равно выводиться exception из TMemoryStream'а. Нужно самому отловить ошибку. Как это можно сделать?

P.S. Вопрос на засыпку: Какие вообще ситуации могут быть при ошибке сохранения файла, к примеру, файла не существует, нет прав доступа, недостаточно места на диске. Есть ли полный список таких ошибок?
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума
Старый 03.11.2010, 20:42   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от NoName_emaNoN Посмотреть сообщение
Всё равно выводится exception из TMemoryStream'а
А если запускать не из-под Дельфи ?
mihali4 вне форума
Старый 03.11.2010, 21:01   #3
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Выводит "Access violation at address 000000000. Read of address 00000000."
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума
Старый 03.11.2010, 21:04   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ставим бряку на начало процедуры и смотрим точное место возникновения ошибки.
mihali4 вне форума
Старый 03.11.2010, 21:26   #5
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Уже сделал, SaveToFile и есть точное место.
Для теста файлу можно просто заранее присвоить атрибут "Только для чтения" и попробовать сохранить MemoryStream в этот файл. Вылетит ошибка, написанная выше.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума
Старый 03.11.2010, 21:39   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну так прочитайте атрибуты файла и либо откажитесь от записи, либо измените их...
mihali4 вне форума
Старый 03.11.2010, 21:45   #7
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Проблема не только в атрибутах. Суть в том, что нужно отловить ошибку записи. Не важно будь то атрибуты, или не хватает места на диске, или прав нет, нужно отловить ошибку и узнать что за ошибка.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума
Старый 03.11.2010, 21:51   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А попробуйте просто EXE-шник запустить (а не RUN(F9) из Delphi)
Скорее всего, exception перехватывает и отображает IDE Delphi
это поведение переключается в настройках:
меню - Tools - Debugges Options - закладка "Language Exception"
убрать птичку [ ] Stop on Delphi Exceptions


---
Ого, тут уже написали сколько!
Цитата:
Выводит "Access violation at address 000000000. Read of address 00000000."
обычно эта ошибка говорит об обращении к памяти, которая не была выделена объекту.
А ну-ка. покажите код целиком.. Вы, часом, не забыли создать TMemoryStream ?!


вот, проверил.
всё работает!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var OutputFile : TMemoryStream;
  FileName, s : shortstring;
begin
  FileName := 'C:\test1.mmm';
  OutputFile := TMemoryStream.Create;
  s := 'Hello, Stream!';
  OutputFile.Write(s[0], Length(s)+1);

  try
    OutputFile.SaveToFile(FileName);
  except
    ShowMessage('Невозможно сохранить файл');
  end;

  FreeAndNil(Output);

end;

Последний раз редактировалось Serge_Bliznykov; 03.11.2010 в 22:03.
Serge_Bliznykov вне форума
Старый 03.11.2010, 22:00   #9
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Ошибка выскакивает и при простом запуске exe файла.
Да, я знаю что ошибка выскакиевает в таких ситуациях, но здесь что-то другое.
Нет, я не забыл его ни создать, ни разрушить. Всё прекрасно работает если файл есть и он доступен для записи: всё записывается прекрасно. Но если файлу поставить атрибут "только для чтения", то сразу же выскакивает эта ошибка.

Для опыта попробуйте по клику на кнопку создать обработчик которые создаёт, пишет в MemoryStream, и сохраняет его в файл. Всё будет прекрасно, но потом поставьте атрибут "только для чтения" и сразу же будет вылетать эта ошибка.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума
Старый 03.11.2010, 22:06   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
except
on E:EFCreateError do
      ShowMessage('Невозможно сохранить файл');
end;
mihali4 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка во время сохранения. LizaVeta БД в Delphi 0 10.05.2010 01:21
TMemoryStream Владимир1988 Помощь студентам 0 13.02.2010 13:04
Ошибка сохранения в файл [Delphi] StudeHt Помощь студентам 5 10.01.2010 19:43
Ч чём ошибка моего кода сохранения и загрузки? AngelOfDeath Общие вопросы Delphi 3 08.04.2008 13:55