Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему ругается компилятор? [D2005, XP]


Дмитрий. М ©   (2010-04-20 11:32:00) 

Здравствуйте Мастера!

Почему ругается компилятор?

// Определение размера файла

function GetFileSize(FileName: string): Longint;
var
 SearchRec: TSearchRec;
begin
 if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
   try
     result := SearchRec.Size;
   finally
     FindClose(SearchRec);
   end;
end; // [DCC Warning] W1035 Return value of function 'GetFileSize' might be undefined


* - Возвращаемое значение 'GetFileSize' функции могло бы быть неопределенным.

Как исправить баг?


Anatoly Podgoretsky   (2010-04-20 14:56:00) [1]

> Дмитрий. М  (20.04.2010 11:37:03)  [3]

Сомневаюсь, что у тебя бы вообще откомпилировало или таже ошибка.


Дмитрий. М   (2010-04-20 12:32:00) [2]

Спасибо Всем! Вопрос Исчерпан!


DVM   (2010-04-20 12:14:00) [3]


> [DCC Warning] W1002 Symbol 'FindData' is specific to a platform

{$WARN SYMBOL_PLATFORM OFF}

или используй другой вариант


DVM   (2010-04-20 12:13:00) [4]

function GetFileSize(const FileName: String): Int64;
var
 FD : TWin32FindData;
 FH : THandle;
begin
 Result := 0;
 FH := FindFirstFile(PChar(FileName), FD);
 if FH = INVALID_HANDLE_VALUE then exit;
 Result := FD.nFileSizeHigh * 4294967296 + FD.nFileSizeLow;
 Windows.FindClose(FH);
end;


Ins   (2010-04-20 12:13:00) [5]


> [DCC Warning] W1002 Symbol 'FindData' is specific to a platform


Отключи platform-варнинги, если глаза мазолят. Варнинги, конечно, отключать не желательно, но именно platform можно безбоязненно, сам подумай почему


Дмитрий. М   (2010-04-20 12:05:00) [6]


>     converter.low := SRec.FindData.nFileSizeLow;
>     converter.high:= SRec.FindData.nFileSizeHigh;

[DCC Warning] W1002 Symbol 'FindData' is specific to a platform


И. Павел   (2010-04-20 12:01:00) [7]

> Если можно пример, буду очень признателен.


...
type EGFSError = class (Exception)
    end;
...
function GetFileSize(FileName: string): Longint;
var  SearchRec: TSearchRec;
begin
if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
  try
    result := SearchRec.Size;
  finally
    FindClose(SearchRec);
  end
else raise EGFSError.Create('');
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 try
   GetFileSize('');
 except
   on EGFSError do {Обработка ошибки}
 end;
end;


Leonid Troyanovsky   (2010-04-20 11:57:00) [8]


> Дмитрий. М   (20.04.10 11:50) [6]

By Peter Below:

Function GetfilesizeEx( const filename: String ): int64;
Var
  SRec: TSearchrec;
  converter: packed record
    case Boolean of
      false: ( n: int64 );
      true : ( low, high: DWORD );
    end;
Begin
  If FindFirst( filename, faAnyfile, SRec ) = 0 Then Begin
    converter.low := SRec.FindData.nFileSizeLow;
    converter.high:= SRec.FindData.nFileSizeHigh;
    Result:= converter.n;
    FindClose( SRec );
  End
  Else
    Result := -1;
End;

--
Regards, LVT.


Дмитрий. М   (2010-04-20 11:50:00) [9]


> DVM ©   (20.04.10 11:46) [5]


А она и не будет юзаться для больших файлов, максимум ~ 100 mb


DVM   (2010-04-20 11:46:00) [10]


> Дмитрий. М   (20.04.10 11:32) 

Данная функция на определит размер файла больше 4 гигабайт.


Дмитрий. М   (2010-04-20 11:38:00) [11]


> Или генерировать исключение, если файл не найден.

Если можно пример, буду очень признателен.


И. Павел   (2010-04-20 11:37:00) [12]

Или генерировать исключение, если файл не найден.


Дмитрий. М   (2010-04-20 11:37:00) [13]


> И. Павел ©   (20.04.10 11:35) [1]

Спс, а я от неопытности, писал: result := ''; вот чайниг)))


И. Павел   (2010-04-20 11:35:00) [14]

> Как исправить баг?

В начале функции написать result := -1


Наверх

Титульная страница Поиск, карта сайта Написать письмо