Вниз
Скачать: CL | DM;

Размер файла   Найти похожие ветки 

← →
Antonmm   (2004-08-29 17:38) [0]

Как с помощью своей программы узнать размер файла?


← →
Anatoly Podgoretsky ©   (2004-08-29 17:39) [1]

FileSize


← →
begin...end ©   (2004-08-29 18:13) [2]


>  Antonmm   (29.08.04 17:38)

В дополнение к [1]: этот способ удобен, если ты пользуешься файловой переменной. Если это не так, т.е. тебе нужно узнать размер файла, находящегося по заданному пути, лучше, ИМХО, использовать функцию FileSizeByName() из модуля idGlobal.


← →
Antonn ©   (2004-08-29 19:07) [3]

Возвращает размер в байтах:

function GetFileSize(FileName: String): Integer;
var
 FS: TFileStream;
begin
 try
   FS := TFileStream.Create(Filename, fmOpenRead);
 except
   Result := -1;
 end;
 if Result <> -1 then Result := FS.Size;
 FS.Free;
end;


← →
GuAV ©   (2004-08-29 19:21) [4]


>  except
>    Result := -1;
>  end;

ИМХО зря...

>  if Result <> -1 then Result := FS.Size;

не компилил но варнинг угадаю, и он по существу будет.

короче, [3] - бред, или [1] или [2] или GetFileSize/GetFileSizeEx


← →
Внук ©   (2004-08-29 19:34) [5]

>>Как с помощью своей программы узнать размер файла?
 С помощью своей - просто, вот с помощью чужой...


← →
Anatoly Podgoretsky ©   (2004-08-29 19:56) [6]

GuAV ©   (29.08.04 19:21) [4]
Мелочь, а вот в некоторых случаях будет гадать, почему программа не работает :-)
Ошибок по крайней мере 2


← →
GuAV ©   (2004-08-29 20:08) [7]


> Ошибок по крайней мере 2

А я три вижу:
Одна - TFileStream.Create(Filename, fmOpenRead); не получилось (реально, если в имени недопустимый символ) -  Free всё же вызван.
Вторая - Result без except мусор => м.б. и -1
Третья -  FS.Size - не получилось - Free не вызван.
+ Недочет - не надо гасить исключение, оно ещё пригодилось бы.


← →
Anatoly Podgoretsky ©   (2004-08-29 20:16) [8]

1. Free вызван объект не создан, получаем новую ошибку
2. Открыть не получилось, нет прав
3. Открыли, но в это время другая программа хочет открыть монопольно, получит по зубам
4. Все нормально открыли, но из за неинициализации можем получить размер -1

Как было сказано - это как минимум, а максимум искать не хочется.
Из за пунктов 2 и 3 нет смысла устранять другие ошибки.


← →
GuAV ©   (2004-08-29 20:27) [9]


> 3. Открыли, но в это время другая программа хочет открыть
> монопольно, получит по зубам

Подробнее, если можно, что именно Вы имеете ввиду.


← →
jack128 ©   (2004-08-29 20:39) [10]

GuAV ©   (29.08.04 20:27) [9]
что открывать нужно с флагом fmShareDenyRead


← →
GuAV ©   (2004-08-29 20:51) [11]


> fmShareDenyRead

понял.


← →
Anatoly Podgoretsky ©   (2004-08-29 20:52) [12]

GuAV ©   (29.08.04 20:27) [9]
Программа заперашивает монопольное использование, а в это время файл открыт этой функции, будет ошибка открытия. В тоже время можно получать размер не открывая файлов и не имея прав на чтение и запись, достаточно только на просмотр каталога. Вот при таком случае программ не доставит неприятностей не себе ни что более важно другим программам.

jack128 ©   (29.08.04 20:39) [10]
Не нужно, это все равно неверно. FindFirst


← →
GuAV ©   (2004-08-29 21:07) [13]


> В тоже время можно получать размер не открывая файлов и
> не имея прав на чтение и запись, достаточно только на просмотр
> каталога.

Да но ведь не ошибка, а недочёт, что не получается там где могло и получится. Вот мемлик, AV, и русская рулетка с result - это ИМХО хуже.


← →
KilkennyCat ©   (2004-08-29 21:11) [14]

А я знаю самый жуткий способ!
1. Запустить из своей проги проводник.
2. Открыть в нем папку с необходимым файлом.
3. выбрать режим просмотра "таблица".
4. Выделить нужный файл.
5. скопировать изображение выделенного.
6. распознать надпись о размере.


← →
GuAV ©   (2004-08-29 23:54) [15]

<off>
KilkennyCat ©   (29.08.04 21:11) [14]

я тоже шел юзать умею ;-)

function GetLibString(const Lib: PChar;
 ID: LongWord; Size: Integer): string;
var hDll: THandle;
begin
 hDll := LoadLibrary(Lib);
 if hDll=0 then RaiseLastOSError;
 try
   SetLength(Result, Size);
   SetLength(Result, LoadString(hDll, ID, @Result[1], Size));
 finally
   FreeLibrary(hDll);
 end;
end;

procedure CheckFileName(const S: string);
const D="\/:*?"<>|";
var I: Integer;
begin
for I:=1 to Length(D) do
  if StrScan(PChar(S), D[I])<>nil then
    raise Exception.Create(GetLibString(shell32, 4109, 128));
end;
</off>


← →
KilkennyCat ©   (2004-08-30 03:32) [16]


> GuAV ©   (29.08.04 23:54) [15]


Не, нечестно! :)
Я 5-ый и 6-ой пункты предполагал работу с графикой!


← →
GuAV ©   (2004-08-30 11:17) [17]

KilkennyCat ©   (30.08.04 03:32) [16]

В моём случае юзать графику труднее чем в сабжевом

Кстати, ВордДок будет так же работать ?


← →
[lamer]Barmaglot ©   (2004-08-30 11:29) [18]

Самый быстрый вариант, как это не странно FindFirst...



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

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



Память: 0.49 MB
Время: 0.02 c
14-1093090633
Вольный Стрелок
2004-08-21 16:17
2004.09.12
настройка Opera 7 для чтения news-конференций


4-1090940633
sensor
2004-07-27 19:03
2004.09.12
Дескриптор (handle) элемента другого приложения


3-1092521194
Fantasy
2004-08-15 02:06
2004.09.12
DATA


1-1093544027
h1
2004-08-26 22:13
2004.09.12
У кого есть olympus sdk для delphi


14-1093261320
onix
2004-08-23 15:42
2004.09.12
Русские буквы




   Наверх