Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизКак можно определить размер файла? Найти похожие ветки
← →
ИМХО © (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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c