<?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=163525&amp;view=findpost&amp;p=1363969</guid>
        <pubDate>Sun, 03 Dec 2006 12:49:20 +0000</pubDate>
        <title>Можно ли уменьшить размер файла?</title>
        <link>https://forum.sources.ru/index.php?showtopic=163525&amp;view=findpost&amp;p=1363969</link>
        <description><![CDATA[HardRock: Окей, сейчас попробую. Если чего не получится - напишу. <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="2006-12-03T16:28:45+03:00">03.12.06, 13:28</time></span></span><br>
Отлично&#33; Всё работает как часы :)<br>
<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">Private Declare Function CreateFile Lib &quot;kernel32&quot; Alias &quot;CreateFileA&quot; (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long</div><div class="code_line">Private Declare Function SetFilePointer Lib &quot;kernel32&quot; (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long</div><div class="code_line">Private Declare Function SetEndOfFile Lib &quot;kernel32&quot; (ByVal hFile As Long) As Boolean</div><div class="code_line">Private Declare Function CloseHandle Lib &quot;kernel32&quot; (ByVal hObject As Long) As Long</div><div class="code_line">Private Const GENERIC_WRITE = &amp;H40000000</div><div class="code_line">Private Const CREATE_NEW = 1</div><div class="code_line">Private Const OPEN_EXISTING = 3</div><div class="code_line">Private Const FILE_SHARE_READ = &amp;H1</div><div class="code_line">Private Const FILE_SHARE_WRITE = &amp;H2</div><div class="code_line">Private Const FILE_BEGIN = 0</div><div class="code_line">Private Const FILE_END = 2</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">Public Function ResizeFile(FileName As String, EOFPosition As Long, Optional Relative As Boolean = False, Optional CreateNew As Boolean = False) As Boolean</div><div class="code_line">Dim hFile As Long, CNF As Long, FEOF As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39; Флаги</div><div class="code_line">&nbsp;&nbsp; &nbsp;If CreateNew Then CNF = CREATE_NEW Else CNF = OPEN_EXISTING</div><div class="code_line">&nbsp;&nbsp; &nbsp;If Relative Then FEOF = FILE_END Else FEOF = FILE_BEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39; Ресайзим файл</div><div class="code_line">&nbsp;&nbsp; &nbsp;hFile = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&amp;, CNF, 0, 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;If hFile = 0 Then Exit Function</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer hFile, EOFPosition, 0, FEOF</div><div class="code_line">&nbsp;&nbsp; &nbsp;ResizeFile = SetEndOfFile(hFile)</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle hFile</div><div class="code_line">End Function</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><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">&#39; Установить размер существующего файла равным 10 байтам</div><div class="code_line">ResizeFile &quot;C:\testfile.txt&quot;, 10 </div><div class="code_line">&nbsp;</div><div class="code_line">&#39; Увеличть размер существующего файла на 10 байт (отрицательное число будет уменьшать)</div><div class="code_line">&#39; Отчёт идёт относительно текущего конца файла</div><div class="code_line">ResizeFile &quot;C:\testfile.txt&quot;, 10, True </div><div class="code_line">&nbsp;</div><div class="code_line">&#39; Создать файл размером 10 байт</div><div class="code_line">&#39; При этом файл будет заполнен нулевыми байтами</div><div class="code_line">ResizeFile &quot;C:\testfile.txt&quot;, 10, False, True</div><div class="code_line">ResizeFile &quot;C:\testfile.txt&quot;, 10, True, True </div><div class="code_line">&nbsp;</div><div class="code_line">&#39; Функция вернёт True если удалось поменять размер и False в противном случае</div></ol></div></div></div></div><br>
<br>
PS: Респект <strong class='tag-b'>SCINER</strong>&#39;у за декларацию SetEndOfFile ;)]]></description>
        <author>HardRock</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163525&amp;view=findpost&amp;p=1363965</guid>
        <pubDate>Sun, 03 Dec 2006 12:43:45 +0000</pubDate>
        <title>Можно ли уменьшить размер файла?</title>
        <link>https://forum.sources.ru/index.php?showtopic=163525&amp;view=findpost&amp;p=1363965</link>
        <description><![CDATA[SCINER: можно есть такая функция<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">Private Declare Function SetEndOfFile Lib &quot;kernel32&quot; Alias &quot;SetEndOfFile&quot; (ByVal hFile As Long) As Long</div></ol></div></div></div></div><br>
алгоритм действий:<br>
CreateFile<br>
SetFilePointer<br>
SetEndOfFile<br>
CloseHandle]]></description>
        <author>SCINER</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163525&amp;view=findpost&amp;p=1363930</guid>
        <pubDate>Sun, 03 Dec 2006 11:58:47 +0000</pubDate>
        <title>Можно ли уменьшить размер файла?</title>
        <link>https://forum.sources.ru/index.php?showtopic=163525&amp;view=findpost&amp;p=1363930</link>
        <description><![CDATA[HardRock: Раньше как-то не сталкивался с работой с файлами в таком объёме, поэтому прошу помощи.<br><br>Смысл такой:<br>Есть файл, в котором нужно удалить блок данных скажем где-то в середине файла.<br>Тогда мы берём все данные за удаляемым блоком и двигаем их в позицию блока.<br>В результате то что мы хотели удалить затирается, а в конце файла остаётся мусор.<br><br>Вопрос в том, можно ли как-то отрезать этот мусор в конце файла, тем самым уменьшив размер данного файла?<br><br>Просто файл может быть довольно большим, и создание временного файла не лучший вариант.<br>Да и такой подход выглядит красивее.]]></description>
        <author>HardRock</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	