Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Получение размера файла

Автор: nagim 16.03.2007 1:24

Как получить размер файла в байтах, не открывая его? И еще плиз напомните, как там удаляются файлы?
А, и еще - как задать в паскале параметр, ну шоб, например, я ввел program.exe -abc из cmd, и шоб юзать в проге это строку abc???

Автор: volvo 16.03.2007 1:39

1) FindFirst с именем файла, и в структуре SearchRec будет записана вся информация о файле, включая его размер...

2) процедура Erase

3) ParamCount вернет количество переданных параметров, а ParamStr(i) - сами параметры (в виде строки)

Автор: nagim 17.03.2007 22:37

Сорри за тупость, но надо ли закрывать стертый файл? То есть не будет каких-либо конфликтов при обращении приложений к "почти удаленному" файлу?

Автор: volvo 17.03.2007 22:49

Нет такого понятия "почти удаленный"... До вызова Erase (кстати, перед вызовом Erase файл нужно закрыть, и об этом написано в хелпе) - файл существует, после вызова уже нет... У тебя же не возникает вопрос, не будет ли конфликтов, после того, как ты нажал "Очистить корзину", но перед тем, как корзина очистится?

Об этом заботится ОС, вот и оставь это для нее...

Добавлено через 3 мин.
А если файл занят каким-то приложением, то он не будет удален... IOresult вернет 5 (File access denied) ...

Автор: nagim 17.03.2007 23:24

Во-во, я хотел сказать, что надо ли закрывать удаляемый файл. Просто люблю, когда все работает по правилам.
Кстати erase'ом удаляется и незакрытый файл... Во встроенном хелпе не рылся, но в справочнике моем про закрытие ничего не сказано. Хотя справочник датируется 92-м годом... Пора менять.
Кстати, можно ли (возможно я наглею...) заставить pas читать файлы не формата 8.3?
И вконец вопросик: я пытался взять размер файлы как ты сказал (то бишь FindFirst'ом), в хелпе такое описание структуры SearchRec:

type
{тип SearchRec, использующийся в процедурах FindFirst и FindNext}
SearchRec = record
Fill : array[1..2] of byte;
Attr : byte;
Time : longint;
Size : longint;
Name : string[12];
end;

А мне pas при использовании FindFirst говорит, что тип SearchRec неправильный. Пришлось юзать FileSize с открытием.
Это из-за тупого windos.tpu?

Автор: Артемий2 17.03.2007 23:33

А ты в uses Dos пооставил?

Автор: volvo 17.03.2007 23:36

Цитата
Кстати, можно ли (возможно я наглею...) заставить pas читать файлы не формата 8.3?
Можно. Если речь про Турбо Паскаль - то была тема про длинные имена, поищи по форуму, там модуль для этого дела выкладывался, а если FPC, например (ну, или другой современный компилятор) - то он это умеет по определению, без всяких доп. средств...

Цитата
Это из-за тупого windos.tpu?
Чего бы WinDos использовать, если можно просто DOS? В WinDos этот тип называется TSearchRec, соответственно, и названия констант там другие...

Автор: nagim 17.03.2007 23:56

Хм... Опять ступил.
volvo, спасибо, благодаря (во многом) тебе был написан чудо батник по перепаковке rar -> 7z, с удалением архива большего размера, то есть теперь свободного пространства на винте поприбавится...