![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Получаю размер из файла по функции: 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	function GetFileSize(FileName: String): Integer;
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(Filename, fmOpenRead);
  except
    Result := -1;
  end;
  if Result <> -1 then Result := FS.Size;
  FS.Free;
end;когда файл размером 3+ гб, он отображает отрицательное число и не правильное.. как можно доработать её ? например файл 3 662 918 кб (3,49 гб) у меня отображается как -544139589 байт помогите пожалуйста  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 1. Все скорее всего нормально. Просто size имеет тип Int64. Скорее всего у тебя просто переполнение целочисленного типа. Поставь у функции тип Int64. 
		
	
		
		
		
		
		
	
		
		
	
	
	2. Можно воспользоваться функцией API GetFileSize. Только надо помнить, что она возвращает БЕЗЗНАКОВОЕ 32-битное целое.  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 да я догадался что там переполнение) просто не совсем ознакомился с функцией (вообще как общее понятие) и искал ответ в var а не в function GetFileSize(FileName: String): Integer; 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	var  ResultFile: TWin32FindData; // информация о файле
      InFName:String; // полное имя файла(имя+путь)
      Size:Int64; //размер файла
...
 FindFirstFile(PChar(InFName), ResultFile);
 Size:=(ResultFile.nFileSizeHigh)*4294967296+ResultFile.nFileSizeLow; | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 да я уже давно разобрался, спасибо  
		
	
		
		
		
		
		
	
		
		
	
	
	![]() только что у тебя я вообще не понимаю   что за "4294967296" ?и еще, можно ли создать тип больше чем int64 (если вдруг не влезет) ?  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Цитата: 
	
  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 а как создать больше? перечислимым type есть ограничение... например в 2 раза больше чем int64  
		
	
		
		
		
		
		
	
		
		
	
	
	![]()  |