Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.023 c
9-1093586545
Nic
2004-08-27 10:02
2004.12.26
Помогите!


14-1102562004
Думкин
2004-12-09 06:13
2004.12.26
С днем рождения! 9 декабря


3-1101713994
Fiend
2004-11-29 10:39
2004.12.26
не сохраняется DataSource


1-1102800010
Geo
2004-12-12 00:20
2004.12.26
проблема с RichEdit


4-1100421549
DeepProg
2004-11-14 11:39
2004.12.26
Вызвать контекстное меню Windows Explorer для файла/папки




   Наверх