Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2011, 07:07   #1
Max3001
 
Регистрация: 18.03.2011
Сообщений: 3
Восклицание Определение размера открытого файла

Привет, Всем!
Такая вот нужда Определить размер открытого файла, например: определение размера работающего скомпилированного файла проекта.
При использовании функции гетфайлсайз или просто файлсайз вылетают ошибки и ответа нет.
Прошу помощи!

П. С. Ведь Windows не кричит на подобное действие, если смотрим свойства открытого файла, или просто не знаю где в таком случае собака зарыта (т. е. все заранее было записанно им).
Max3001 вне форума Ответить с цитированием
Старый 21.04.2011, 08:21   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var FS:TFileStream;
begin
 FS:=TFileStream.Create(Application.ExeName,fmOpenRead or fmShareDenyWrite);
 ShowMessage(IntToStr(FS.Size)+' байт');
 FS.Free;
end;
SERG1980 вне форума Ответить с цитированием
Старый 21.04.2011, 09:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

файл совсем не обязательно открывать, чтобы получить его размер!
посмотрите варианты тут
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2011, 10:23   #4
Max3001
 
Регистрация: 18.03.2011
Сообщений: 3
По умолчанию

SERG1980, спасибо огромное, работает на отлично!;-)

Serge_Bliznykov, дело в том, что интересовало определение размера именно открытого файла (а для определения размера не открытых в инете как раз полно примеров).
Max3001 вне форума Ответить с цитированием
Старый 21.04.2011, 10:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
дело в том, что интересовало определение размера именно открытого файла
А что, варианты, которые я привёл - не определяют размер ОТКРЫТОГО файла?!

Дело в том, что вариант SERG1980 открывает файл повторно в режиме РАЗДЕЛЕНИЯ. следовательно этот код ДАЛЕКО не все файлы сможет открыть.
Хотите, я приведу строку кода, вы запустите программку (она откроет файл в монопольном режиме). А потом, не закрывая её,
в другой программе попытаетесь определить размер файла Вашим способом (через открытие)? Думаю, что получите ошибку...

Впрочем, дело Ваше. Пути решения Вам подсказали, какой выбрать - это Ваше решение..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2011, 11:05   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Хотите, я приведу строку кода, вы запустите программку (она откроет файл в монопольном режиме).
Тёзка дружище, а приведи мне такую строку... просто очень интересно
SERG1980 вне форума Ответить с цитированием
Старый 21.04.2011, 11:36   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Тёзка дружище, а приведи мне такую строку... просто очень интересно
Хм, я был уверен, что Вы догадаетесь на что именно я намекаю.
вот.
на событие создания формы (Form1 - OnCreate)
Код:
procedure TForm1.FormCreate(Sender: TObject);
var FS:TFileStream;
begin
  FS := TFileStream.Create('C:\test1.txt',fmOpenRead or fmShareExclusive);
end;
запустить программу.
потом в другой программе попытайтесь узнать размер 'C:\test1.txt'
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2011, 11:37   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Хм, я был уверен, что Вы догадаетесь на что именно я намекаю.
про это я знаю, думал другой есть способ
SERG1980 вне форума Ответить с цитированием
Старый 21.04.2011, 11:54   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
про это я знаю, думал другой есть способ
ну, фактически это обёртка над Win API

но это не существенно... самое главное, что я хотел донести,
это то, что незачем открывать файл, если информацию о его размере можно получить из файловой системы...
Кроме того, существует возможность (и, как показывает пример с эксклюзивным открытием это отнюдь не гипотетическая возможность!) получить ошибку при определении размера.
Поэтому я не вижу смысла делать менее эффективно и с возможностью получения исключения, когда можно сделать эффективнее, быстрее и более надёжно...

p.s. а это мы ещё не копнули в сторону разрешении(запретов) на право доступа к файлу. Файл может быть не открыт и виден. Но прав на его чтение у текущего процесса может просто напросто не быть...


впрочем. дискуссия затянулась.. я уже всё сказал, что хотел сказать....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2011, 15:31   #10
Max3001
 
Регистрация: 18.03.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А что, варианты, которые я привёл - не определяют размер ОТКРЫТОГО файла?!
Каюсь, в порыве радости от успеха предоставленного SERG1980 кода, не стал проверять, не найдя там и слова о определении размера открытого файла. :-)
Max3001 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание файла на основании открытого lecko Microsoft Office Excel 20 17.03.2011 12:53
Неверное определение размера файла? _SERGEYX_ Свободное общение 2 17.11.2010 13:28
определение размера PE файла wmzvov Win Api 2 16.11.2010 13:57
определение размера массива maksim_serg Microsoft Office Excel 1 29.03.2010 07:00
Определение размера операнда и адреса Sergey.Voloxov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 06.03.2010 22:58