Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Как можно определить размер файла?   Найти похожие ветки 

 
ИМХО ©   (2004-11-15 17:36) [0]

Как можно определить размер файла?
FileSize, пожалуйста, не предлагать.


 
begin...end ©   (2004-11-15 17:39) [1]


> ИМХО ©   (15.11.04 17:36)

1. GetFileSize.
2. FindFirstFile с последующим просмотром TWin32FindData.
3. FileSizeByName (версию Delphi, в которой она есть, не помню).


 
ИМХО ©   (2004-11-15 18:26) [2]

еще варианты


 
Rem ©   (2004-11-15 18:50) [3]

Открыть файл, загнать указатель в конец файла и определить его (указателя) позицию.


 
GuAV ©   (2004-11-15 18:59) [4]

GetFileSizeEx

и эта... колись в чём развод на этот раз ;-)


 
ИМХО ©   (2004-11-15 19:06) [5]

вот так пойдет, как считаете:

function MyGetFileSize(FileName: string): Integer;
var
 FS: TFileStream;
begin
 FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
 try
   Result := FS.Size;
 finally
   FS.Free;
 end;
end;


 
ИМХО ©   (2004-11-15 19:12) [6]

или есть подводные камни?


 
novice_man ©   (2004-11-15 19:12) [7]

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;

TSearchRec = record
 Time: Integer;
 Size: Integer; <<<---- размер
 Attr: Integer;
 Name: TFileName;
 ExcludeAttr: Integer;
 FindHandle: THandle;
 FindData: TWin32FindData;
end;


 
GuAV ©   (2004-11-15 19:13) [8]

Лучше всего через FindFirstFile - не открывая даже файл, а то он может быть открыт с апретом а последующее чтение.


 
GuAV ©   (2004-11-15 19:15) [9]

ИМХО ©   (15.11.04 19:12) [6]
или есть подводные камни?

Посмотри размер своп-файла.
Если через хэндл то IMHO лучше с правами FILE_READ_ATTRIBUTES


 
ИМХО ©   (2004-11-15 19:23) [10]


> GuAV ©   (15.11.04 19:13) [8]
> Лучше всего через FindFirstFile - не открывая даже файл,
> а то он может быть открыт с апретом а последующее чтение.


дай заценить код, плиз


 
GuAV ©   (2004-11-15 19:52) [11]

procedure TForm1.FormCreate(Sender: TObject);
var h: THandle; W32D: TWin32FindData;
begin
 h := FindFirstFile("C:\WIN386.SWP", W32D);
 if h = INVALID_HANDLE_VALUE then RaiseLastOSError;
 Windows.FindClose(h);
 Caption := Format("Size = %d", [Int64(W32D.nFileSizeLow)]);
end;


 
GuAV ©   (2004-11-15 19:56) [12]

GuAV ©   (15.11.04 19:52) [11]
Int64

убрать.

а если нужно >2.1 ГБ, то учеть и nFileSizeHigh


 
begin...end ©   (2004-11-15 20:02) [13]


> [5] ИМХО ©   (15.11.04 19:06)

Так может не пойти, почему - см. [8], но приведённая тобой функция совершенно аналогична (по реализации) функции FileSizeByName, о которой я уже упоминал.

Если твоя задача состоит в коллекционировании таких функций, могу предложить ещё одну:

function MyFileSize(Path: String): Integer;
begin
 Result := FileSizeByName(Path) + 1;
 Dec(Result)
end.


> [11] GuAV ©   (15.11.04 19:52)

В общем случае не пойдёт, откуда ты знаешь, может у него огромный файл?


 
ИМХО ©   (2004-11-15 20:30) [14]

у меня Delphi 5, там нет FileSizeByName


 
begin...end ©   (2004-11-15 20:31) [15]


> [12] GuAV ©   (15.11.04 19:56)

Почему 2,1 ГБ, разве не 4294967295 байт (4 ГБ)?


 
ИМХО ©   (2004-11-15 20:32) [16]


> GuAV ©   (15.11.04 19:56) [12]
> GuAV ©   (15.11.04 19:52) [11]
> Int64
> убрать.


что убрать, не понял


 
begin...end ©   (2004-11-15 20:39) [17]


> [14] ИМХО ©   (15.11.04 20:30)

> у меня Delphi 5

А чего ж ты сразу не сказал, ответы могли бы быть несколько другими. Кроме этого, нужно было указать версию ОС, т.к., например, GetFileSizeEx нет на Windows 95/98.

> [16] ИМХО ©   (15.11.04 20:32)

Ну вот, обещал заценить код, а место этого задаёшь дополнительные вопросы.

Помимо всего этого, до сих пор непонятно, почему у тебя аллергия на FileSize.


 
ИМХО ©   (2004-11-15 20:48) [18]

FileSize не работает с текстовыми


 
begin...end ©   (2004-11-15 21:00) [19]


> [18] ИМХО ©   (15.11.04 20:48)

Ну и что, файл только для тебя текстовый; можно использовать, например, file of Byte, и применить FileSize.

Если же задача поставлена так, что существует переменная F: TextFile, и для определения размера нужно использовать именно её, то тут, по-моему, не поможет ни один из уже предложенных способов.



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
1-1102668888
leonidus
2004-12-10 11:54
2004.12.26
Как программно скомпилировать CHM-файл из набора HTML


1-1103097139
Bless
2004-12-15 10:52
2004.12.26
Как сделать так, чтобы во время отладки не заходило в какой-то


1-1102673024
B-boy-Dimo-N
2004-12-10 13:03
2004.12.26
Как прервать выполнение рекурсии одним нажатием клавиши ?


14-1102411701
Nic87
2004-12-07 12:28
2004.12.26
Позвольте представиться


14-1101980129
pavel_pavel
2004-12-02 12:35
2004.12.26
Что-то с сайтом или с компом?