Главная страница
    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.072 c
11-1221509060
tsugi
2008-09-16 00:04
2010.08.27
D2009


15-1265814153
OneYoungMan
2010-02-10 18:02
2010.08.27
Речевое общение через сеть..


15-1263914019
TUser
2010-01-19 18:13
2010.08.27
СШ ГЭС: обледенение


9-1186669282
Cerberus
2007-08-09 18:21
2010.08.27
Броня в огне


15-1273508224
AKE
2010-05-10 20:17
2010.08.27
Где можно найти программиста на C++?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский