Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.059 c
15-1265718113
Virtus
2010-02-09 15:21
2010.08.27
Активировать окно при наведении мышкой


2-1273619311
NasdaqPredictor
2010-05-12 03:08
2010.08.27
О написании собственной DLL


2-1272870252
Виктор
2010-05-03 11:04
2010.08.27
could not find program


4-1236197897
d@vinchi
2009-03-04 23:18
2010.08.27
Как получить зарегистрированные в системе TAPI-линии


2-1272519215
wwictor
2010-04-29 09:33
2010.08.27
Как подключится к серверу mySQL и добавить запись?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский