![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему ругается компилятор? [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