Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.033 c
3-1092386137
Вика
2004-08-13 12:35
2004.09.12
Проблема с текстовым полем...


1-1093410172
TankMan1
2004-08-25 09:02
2004.09.12
Как запустить приложение с параметром? :)


14-1092738529
saNat
2004-08-17 14:28
2004.09.12
Программирование COM порта


1-1093515851
slart
2004-08-26 14:24
2004.09.12
Длительность видео-роликов


10-1036753799
KA_
2002-11-08 14:09
2004.09.12
OLE с помощью CORBA





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский