Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизПочему ругается компилятор? Найти похожие ветки
← →
Дмитрий. М (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.066 c