Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.02;
Скачать: CL | DM;

Вниз

Обработка ошибки   Найти похожие ветки 

 
Iris ©   (2008-09-26 11:43) [0]

Проблема в чем: есть код, который падает, если файл с таким именем уже открыт. Вроде бы написал исключение, но выскакивает сначала системное исключение, а потом уже мое сообщение.
Как сделать, чтобы появлялось только мое сообщение??
Пока под такой:
       
try
           Self.GridExcelIO.XLSExport( ChangeFileExt(SaveDialog.Files[0], ".xls") );
       except
           ShowMessage("Файл с таким же именем уже открыт! Для перезаписи закройте его, и повторите сохранение");
       end;


 
Cosinus   (2008-09-26 11:46) [1]

Например просто проверить сначала, а не открыт ли случаем файл с таким именем... )))


 
Ega23 ©   (2008-09-26 11:48) [2]


> Как сделать, чтобы появлялось только мое сообщение??


Запускать exe, а не из-под отладчика.
Либо галку снять Stop on Delphi Exceptions


 
Cosinus   (2008-09-26 11:51) [3]

Кстати да!
Я тоже об этом подумал, но пока проверял, уже все решилось )))

Если что вот еще нарыл, мало ли, может пригодится.

Как узнать, используется ли файл в данный момент другим приложением -----------------------------------------------------------------------------
function E9FileStatus(const Origin: string): boolean;
var
 F: TFileStream;
begin
{
   Значение             Описание
   fmCreate             Созда¸т файл с данным именем. Если файл существует, то открыть его в
                                режиме записи.
   fmOpenRead           Открыть файл только для чтения.
   fmOpenWrite          Открыть файл только на запись. При этом запись в файл заменит вс¸ его
                                содержимое.
   fmOpenReadWrite Открыть файл скорее для изменения содержимого чем для замены его.

   Режим доступа должен иметь одно из следующих значений:

   Значение            Описание
   fmShareCompat       Доступ к файлу совместим с FCB.
   fmShareExclusive    Другое приложение не может открыть файл для различных целей.
   fmShareDenyWrite    Другое приложение может открыть файл для чтения, но не для записи.
   fmShareDenyRead     Другое приложение может открыть файл для записи, но не для чтения.
   fmShareDenyNone     Разрешить другим файлам делать с файлом и чтени и запись.

   Если файл невозможно открыть, то Create сгенерирует исключение.
   Возвращает true если файл не заблокирован
}
 try
   F := TFileStream.Create(Origin, fmOpenReadWrite or fmShareExclusive);
   try
     Result := true;
   finally
     F.Free;
   end;
 except
   Result := false;
 end;
end;



 
Ega23 ©   (2008-09-26 11:55) [4]


> Как узнать, используется ли файл в данный момент другим
> приложением


Это только на момент создания FileStream.


 
Palladin ©   (2008-09-26 11:57) [5]

и откуда это недразумение взято?


 
Правильный$Вася   (2008-09-26 12:06) [6]


> Как узнать, используется ли файл в данный момент другим
> приложением

в интервале между проверкой и твоей попыткой использования может случиться, что угодно


 
Iris ©   (2008-09-26 12:07) [7]

всем спасибо


 
Vlad Oshin ©   (2008-09-26 12:09) [8]

я бы примерно так написал, потому что бесит, когда программа много вопросов задает
(не проверял, прямо тут в TEXTAREA вбивал )
i:=0;
s:=SaveDialog.Files[0];
repeat
    b:=true;
      try
          Self.GridExcelIO.XLSExport( ChangeFileExt(s, ".xls"); );
      except
          begin
            inc(i);
            b:=false;
            s:=s+"1";
          end;
      end;
until b or (i>9);

if i=0 then ShowMessage("Ок!")
else
if i<11 then ShowMessage("Файл записан как"+ S+ "потому, что требуемое имя занято")
         else ShowMessage("Много открытых файлов! Для перезаписи закройте, и повторите сохранение");



Страницы: 1 вся ветка

Текущий архив: 2008.11.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.091 c
15-1220966449
{RASkov}
2008-09-09 17:20
2008.11.02
Excel


2-1222241412
Nick87
2008-09-24 11:30
2008.11.02
SQLзапрос


2-1222350296
tytus
2008-09-25 17:44
2008.11.02
idFTP - как скачать файл с определенной позиции


2-1222254838
@!!ex
2008-09-24 15:13
2008.11.02
Не получается правильно поставить Hook на нажатие клавиши...


15-1220950707
kaif
2008-09-09 12:58
2008.11.02
Эволюция понятий