Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
ВнизОбработка ошибки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c