Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исключение в winapi 
:(
    Опции темы
BLACK_KOT
Дата 22.12.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



Код

function GetFileSize(FIleName: string): integer;
var
  f: file of Byte;
begin
  try
    AssignFile(f, FileName);
    Reset(f);
    result := filesize(F);
    CloseFile(f);
  except
    result := -1;
  end;
end;


...

if GetFileSize('C:\123.df')=-1 then MessageBox(0,'','файл не существует',MB_OK);

обращение к этой процедуре под VCL генерирует сообщение о том что файл не существует. а в winapi вылетает runtime error 2 at 004046B2. почему так происходит - непонятно.


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
Snowy
Дата 22.12.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Потому что не подключен SysUtils.
А без него try не умеет работать.

Добавлено через 4 минуты и 46 секунд
Альтернатива - err.pas из состава KOL
http://kolmck.net/sys/kol_err.zip
Он добавляет 6 kb к exe, но это гораздо меньше, чем SysUtils.
PM MAIL   Вверх
BLACK_KOT
Дата 22.12.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



спасибо, Snowy, разъяснил.

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


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
Snowy
Дата 22.12.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Ну... Тема называется "исключение в winapi"... Я подумал, что грабли в этом.
А проверить несложно:

uses Windows;
Код
function FileExist(FileName: string): boolean;
var fd: TWin32FindData;
begin
  if Integer(FindFirstFile(PChar(FileName), fd)) < 0 then result := false else result := true;
end;

PM MAIL   Вверх
BLACK_KOT
Дата 22.12.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.12.2006

Репутация: нет
Всего: -1



спасибо ещё раз, оказывается всё просто. а то я уж вырезал из sysutils вот такую конструкцию:
Код

type
 LongRec = packed record
    case Integer of
      0: (Lo, Hi: Word);
      1: (Words: array [0..1] of Word);
      2: (Bytes: array [0..3] of Byte);
  end;

function FileAge(const FileName: string): Integer;

var
  Handle: THandle;
  FindData: TWin32FindData;
  LocalFileTime: TFileTime;
begin
  Handle := FindFirstFile(PChar(FileName), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(Handle);
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
      if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,LongRec(Result).Lo) then Exit;
    end;
  end;
  Result := -1;
end;

function FileExists(const FileName: string): Boolean;
begin
  Result := FileAge(FileName) <> -1;
end;       


впринципе, тоже работает, но по объёму с твоей версией несравнить..


--------------------
                       .. я - демо версия Бога от Microsoft..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.