<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=828193</guid>
        <pubDate>Mon, 15 Aug 2005 19:19:47 +0000</pubDate>
        <title>Размер файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=828193</link>
        <description><![CDATA[Петрович: to <strong class='tag-b'>Domino</strong> твой код даст ошибку если файл открыт другой программой.<br>
Правильный способ, лишенный этого недостатка, уже приведен <strong class='tag-b'>Ct757</strong>&#39;ом.<br>
Правда он возвращает 32-х битную величину. Т.е. применима только к файлам, размер которых не превышает 4Гб. Современные файловые системы (NTFS) допускаю размеры файлов более 4 Гб (64 бита). Вот вариант который позволяет работать с такими файлами:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function FileSize (FileName :String) :Int64;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Handle: tHandle;</div><div class="code_line">&nbsp;&nbsp;FindData: tWin32FindData;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Handle := FindFirstFile(PChar(FileName), FindData);</div><div class="code_line">&nbsp;&nbsp;if Handle = INVALID_HANDLE_VALUE then</div><div class="code_line">&nbsp;&nbsp; &nbsp;SysUtils.RaiseLastOSError;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Windows.FindClose(Handle);</div><div class="code_line">&nbsp;&nbsp;if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := 0 &nbsp;// Размер каталога всегда считаем равным 0</div><div class="code_line">&nbsp;&nbsp;else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;SysUtils.Int64Rec(Result).Hi := FindData.nFileSizeHigh;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SysUtils.Int64Rec(Result).Lo := FindData.nFileSizeLow;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Петрович</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=828150</guid>
        <pubDate>Mon, 15 Aug 2005 18:04:17 +0000</pubDate>
        <title>Размер файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=828150</link>
        <description><![CDATA[Domino: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function FileSize(const FileName: String): Cardinal;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FileHandle: THandle;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;FileHandle := &nbsp;CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nil, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Result := GetFileSize(FileHandle, nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseHandle(FileHandle);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;except</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise Exception.Create(&#39;Oops! Can&#39;&#39;t get file size :(&#39;);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Domino</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826964</guid>
        <pubDate>Sun, 14 Aug 2005 10:36:53 +0000</pubDate>
        <title>Размер файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826964</link>
        <description><![CDATA[Петрович: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=111310&view=findpost&p=826861'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Ct757 &#064; <time class="tag-quote__quoted-time" datetime="2005-08-14T07:13:58+00:00">14.08.05, 07:13</time></span><div class='quote '>Rrader<br>
твой способ не будет работать с открытыми файлами. </div></div><br>
Более того. И у <strong class='tag-b'>Rrader</strong>, и у <strong class='tag-b'>GreySkil</strong> есть серьезная ошибка в коде. Если <strong class='tag-b'>TFileStream.Create </strong>пройдет без ошибки, то на момент проверки <strong class='tag-b'>if Result &lt;&gt; -1</strong>, значение <strong class='tag-b'>Result</strong> не определено. И поведение программы будет вообще не предсказуемым.<br>
Кстати, об этом должен был предупредить компилятор. Или у вас отключены проедупреждения?]]></description>
        <author>Петрович</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826861</guid>
        <pubDate>Sun, 14 Aug 2005 07:13:58 +0000</pubDate>
        <title>Размер файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826861</link>
        <description><![CDATA[Ct757: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function GetFSize(const fName: string): Integer;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;w32fd: WIN32_FIND_DATA;</div><div class="code_line">&nbsp;&nbsp;find_h: DWORD;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;find_h:=FindFirstFile(PChar(fName), w32fd);</div><div class="code_line">&nbsp;&nbsp;if find_h&#60;&#62;INVALID_HANDLE_VALUE then</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result:=w32fd.nFileSizeLow else</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result:=-1;</div><div class="code_line">&nbsp;&nbsp;Windows.FindClose(find_h);</div><div class="code_line">end;</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2005-08-14T07:15:42+00:00">14.08.05, 07:15</time></span></span><br>
<strong class='tag-b'>Rrader</strong><br>
твой способ не будет работать с открытыми файлами.]]></description>
        <author>Ct757</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826859</guid>
        <pubDate>Sun, 14 Aug 2005 07:12:07 +0000</pubDate>
        <title>Размер файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826859</link>
        <description><![CDATA[Rrader: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function GetFileSize(FileName: String): Integer;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FS: TFileStream;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;FS := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);</div><div class="code_line">&nbsp;&nbsp;except</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := -1;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if Result &#60;&#62; -1 then Result := FS.Size;</div><div class="code_line">&nbsp;&nbsp;FS.Free;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;ShowMessage(IntToStr(GetFileSize(&#39;c:\prova.pdf&#39;)));</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Rrader</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826850</guid>
        <pubDate>Sun, 14 Aug 2005 06:42:24 +0000</pubDate>
        <title>Размер файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=111310&amp;view=findpost&amp;p=826850</link>
        <description><![CDATA[GreySkil: ЛЮди подскажите.<br>
Есть такая проблема: Нужно узнать размер файла.<br>
<br>
Использовал...<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function GetFileSize(FileName: String): Integer;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FS: TFileStream;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;FS := TFileStream.Create(Filename, fmOpenRead);</div><div class="code_line">&nbsp;&nbsp;except</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := -1;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if Result &#60;&#62; -1 then Result := FS.Size;</div><div class="code_line">&nbsp;&nbsp;FS.Free;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;ShowMessage(IntToStr(GetFileSize(&#39;c:\prova.pdf&#39;)));</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Но этот код не работает, если файл используется другим приложением. Подскажите, как узнать размер, если файл используется в данный момент.]]></description>
        <author>GreySkil</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      </channel>
      </rss>
	