Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.12.2008, 10:16
antonKKEP antonKKEP вне форума
Прохожий
 
Регистрация: 19.11.2008
Сообщения: 18
Репутация: 10
Вопрос Размер файла

Как узнать размер файла, если он более 4 Гб?
Ответить с цитированием
  #2  
Старый 01.12.2008, 23:35
Аватар для hkdkest
hkdkest hkdkest вне форума
Начинающий
 
Регистрация: 06.05.2008
Адрес: Рязань
Сообщения: 180
Репутация: 10
По умолчанию

Цитата:
Сообщение от antonKKEP
Как узнать размер файла, если он более 4 Гб?

А эта функция разве не подойдет?
Как определить размер файла
__________________
Делаю курсовые и лабораторные на Delphi, GPSS, Assembler, C++.
Заказать и почитать отзывы можно на сайте, который указан в этой теме
Дешево!
Ответить с цитированием
  #3  
Старый 02.12.2008, 00:01
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Цитата:
Сообщение от hkdkest
А эта функция разве не подойдет?
Вполне подойдет, но есть "подводный камень". Тип возвращаемого значения этой функции должен быть Int64. Тип Integer для файлов большого размера (более 1.5 Гб) не подходит.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #4  
Старый 02.12.2008, 01:02
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

не знаю работает или нет, просто нашел такой вариант
Код:
1
2
3
4
5
6
7
8
9
function FileSize_(FName: string): int64;
var
  ff: _win32_find_dataa;
  hFind: hwnd;
begin
  hFind := FindFirstfile(pchar(FName), ff);
  if (INVALID_HANDLE_VALUE <> hFind) then
  result := (ff.nFileSizeHigh shl 32) + ff.nFileSizeLow
end;
Ответить с цитированием
  #5  
Старый 03.12.2008, 10:48
k@Z@k k@Z@k вне форума
Новичок
 
Регистрация: 31.07.2007
Сообщения: 55
Репутация: 12
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
unit InfoFiles;
 
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,registry;
 
 
  Type
  TFileInfo=record
    Exists:boolean;//true åñëè ôàéë íàéäåí 
    Name:String; //èìÿ ôàéëà ñ ðàñøèðåíèåì 
    ShortName:String;//DOS 8.3 èìÿ ôàéëà 
    NameNoExt:String;//èìÿ ôàéëà áåç ðàñøèðåíèÿ 
    Extension:string;//ðàñøèðåíèå ôàéëà 
    AssociatedFile:string;//ïðîãðàììà ñ êîòîðîé àññîöèèðîâàí ôàéë 
    Path:string;// ïóòü ê ôàéëó 
    ShortPath:string;// DOS 8.3 ïóòü ôàéëà 
    Drive:string;// äèñêîâîä íà êîòîðîì íàõîäèòñÿ ôàéë 
    CreateDate:TDateTime; //âðåìÿ êîãäà ôàéë ñîçäàí 
    Size:Int64;// ðàçìåð ôàéëà (ðàáîòàåò äëÿ ôàéëîâ è áîëüøå 2Gb) 
    Attributes:record //íàëè÷èå/îòñóòñòâèå ñèñòåìíûõ àòðèáóòîâ
    ReadOnly:boolean
    Hidden:boolean
    System:boolean
    Archive:boolean;
    end
    ModifyDate:TDateTime; // âðåìÿ ïîñëåäíåãî èçìåíåíèÿ ôàéëà 
    LastAccessDate:TDateTime; // äàòà ïîñëåäíåãî îòêðûòèÿ ôàéëà 
   end;
 
  Function ReadFileInfo(FileName:string):TFileInfo;
 
 
implementation
 
 Function ReadFileInfo(FileName:string):TFileInfo;
 var ts:TSearchRec;
 
 Function FileTime2DateTime(FT:_FileTime):TDateTime;
  var FileTime:_SystemTime; 
  begin 
  FileTimeToLocalFileTime(FT, FT); 
  FileTimeToSystemTime(FT,FileTime); 
  Result:=EncodeDate(FileTime.wYear, FileTime.wMonth, FileTime.wDay)+ 
  EncodeTime(FileTime.wHour, FileTime.wMinute, FileTime.wSecond, FileTime.wMilliseconds);
  end
   
  
 Function AssociatedFile(FileExt:string):string;
  var key:string
  begin 
  With TRegistry.create do
  try 
  RootKey:=HKEY_CLASSES_ROOT;
  OpenKey(FileExt, false); 
  Key:=ReadString(''); 
  CloseKey; 
  OpenKey(key+'\Shell\open\command', false); 
  result:=ReadString(''); 
  Closekey; 
  finally 
  free; 
  end 
  end
  
begin
 Result.Name:=ExtractFileName(FileName); 
 Result.Extension:=ExtractFileExt(FileName); 
 Result.NameNoExt:=Copy(Result.Name,1,length(Result.Name)-length(Result.Extension)); 
 Result.Path:=ExtractFilePath(FileName); 
 Result.Drive:=ExtractFileDrive(FileName); 
 Result.ShortPath:=ExtractShortPathName(ExtractFilePath(FileName)); 
 if lowercase(Result.Extension)<>'.exe' then Result.AssociatedFile:=AssociatedFile(Result.Extension); 
 if FindFirst(FileName, faAnyFile, ts)=0 then 
  begin 
  Result.Exists:=true
  Result.CreateDate:=FileDateToDateTime(ts.Time); 
  Result.Size:=ts.FindData.nFileSizeHigh*4294967296+ts.FindData.nFileSizeLow; 
  Result.Attributes.ReadOnly:=(faReadOnly and ts.Attr)>0
  Result.Attributes.Hidden:=(faHidden and ts.Attr)>0
  Result.Attributes.System:=(faSysFile and ts.Attr)>0
  Result.Attributes.Archive:=(faArchive and ts.Attr)>0
  Result.ModifyDate:=FileTime2DateTime(ts.FindData.ftLastWriteTime); 
  Result.LastAccessDate:=FileTime2DateTime(ts.FindData.ftLastAccessTime); 
  Result.ShortName:=ts.FindData.cAlternateFileName; 
  Findclose(ts); 
  end 
  else  
  Result.Exists:=false
 end;
end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:52.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025