Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.49 MB
Время: 0.039 c
1-1102500203
snake1977
2004-12-08 13:03
2004.12.26
QRRichText


3-1101213986
Vn
2004-11-23 15:46
2004.12.26
UDF функция замены символов в строке для ІВ 5.5.


3-1101880675
pkm
2004-12-01 08:57
2004.12.26
Dos and Window


14-1101477178
Красная Майка
2004-11-26 16:52
2004.12.26
Очередное предновогоднее ММР


14-1101230112
alex145
2004-11-23 20:15
2004.12.26
Visual Studio





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский