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

Вниз

Почему ругается компилятор?   Найти похожие ветки 

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

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

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

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

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" функции могло бы быть неопределенным.

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


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

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

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


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

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


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


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

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


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


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

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


 
DVM ©   (2010-04-20 11:46) [5]


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

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


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


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


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


 
Leonid Troyanovsky ©   (2010-04-20 11:57) [7]


> Дмитрий. М   (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 12:01) [8]

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


...
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;


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


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

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


 
DVM ©   (2010-04-20 12:13) [10]

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) [11]


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


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


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


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

{$WARN SYMBOL_PLATFORM OFF}

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


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

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


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

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.098 c
15-1274687750
AKE
2010-05-24 11:55
2010.08.27
У меня много электронной технической литературы...


15-1274432547
boriskb
2010-05-21 13:02
2010.08.27
Можно не всё сразу а выборочно?


2-1271922885
kudatsky
2010-04-22 11:54
2010.08.27
Попадает ли точка в замкнутый многоугольник


2-1273643101
Виктор
2010-05-12 09:45
2010.08.27
Динамический отбор по дате в базе данных


2-1267982007
NBAH1990
2010-03-07 20:13
2010.08.27
Ошибка при передачи данных по TCP протоколу