<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Архивация файлов]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8174&amp;type=atom" />
	<updated>2013-03-28T08:49:45Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8174</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70889#p70889" />
			<content type="html"><![CDATA[<p>Если строки равны по длине, то можно и заменить (если знаете её смещение). А если не равны, то следующий текст сдвигать надо, так что по-любому остаток файла переписывать. В ini-файле с помощью IniWrite можно заменить.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-03-28T08:49:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70889#p70889</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70888#p70888" />
			<content type="html"><![CDATA[<p>Вообщем незнаю что до этого произошло, но все файлы оказались стёртыми. Сейчас всё работает, спасибо!</p><p>&nbsp; &nbsp;Ещё вопрос по FileObject: Можно ли как-то изменить в файле конкретную строку. Например прочитав с помощью IniRead или FileReadLine строку в переменную, можно её заменить в файле с помощью FileObject? То что можно переписать весь файл с помощью FileAppend или FileMove само собой мне понятно.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-28T07:32:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70888#p70888</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70887#p70887" />
			<content type="html"><![CDATA[<p>Значит, открываются нормально. Идите дальше, проверяйте значение length, результат чтения файла в переменную data.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-03-28T06:39:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70887#p70887</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70886#p70886" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>***
 Loop, Parse, infiles, `,, %A_Space%         ; Разбор списка файлов.
    { 
       MsgBox,,FileOpen, %  infile := FileOpen(A_LoopField, &quot;r&quot;)    ; Открыть входной файл на чтение.
      MsgBox,,A_LastError, %  A_LastError
        length := infile.Length() 
***</code></pre></div><p>FileOpen - пусто<br />A_LastError - 0</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-28T06:01:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70886#p70886</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70885#p70885" />
			<content type="html"><![CDATA[<p>Смотрите, что возвращает FileOpen при открытии этих файлов, и если 0, то смотрите значение переменной A_LastError.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-03-28T05:51:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70885#p70885</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70883#p70883" />
			<content type="html"><![CDATA[<p>Воспользовался кодом из #21 поста, почему-то файл архива создаётся только из списка файлов, то есть самого содержимого файлов в нём нет. <br />Файлы указываю так:<br /></p><div class="codebox"><pre><code>SetWorkingDir %A_ScriptDir%
files = EQ-Default.ahk, EQ-Opera.ahk, EQ-Rap.ahk, EQ-Rock.ahk, EQ-S-Rock.ahk, EQ-User.ahk

archive = arch.txt   </code></pre></div><p>больше ничего не менял.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-28T04:53:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70883#p70883</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70808#p70808" />
			<content type="html"><![CDATA[<p><strong>Александр_</strong><br />Знаю что нехорошо, но проблем небыло. Правда я 2.5 гига выделял.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-26T13:04:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70808#p70808</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70807#p70807" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>]Раньше в командной строке правил на Windows 7 32-бит для игрушки надо было, больше двух гб точно можно:<br /></p><div class="codebox"><pre><code>bcdedit /set increaseuserva 3500</code></pre></div><p> разрешить 3.5 гиг. под приложение.</p></blockquote></div><p>Ага и ядру 500 метров оставить? Если драйвер упадёт от нехватки памяти, то ты получишь BSOD и все несохранённые данные испарятся безо всяких предупреждений. И это не говоря уже о том, что нельзя писать программу в расчёте на нестандартную конфигурацию ОС.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-03-26T13:01:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70807#p70807</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70806#p70806" />
			<content type="html"><![CDATA[<p><strong>YMP</strong><br />Спасибо за пример! Буду курить.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-26T12:40:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70806#p70806</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70805#p70805" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>здорово, я и не знал что появился нормальный класс для работы с файлами.</p></blockquote></div><p>Игрался я пару недель назад с FileObject, и могу сказать что не очень оно стабильно работает в целом, и в записи в частности. Хотя может что-то не понял.<br /></p><div class="codebox"><pre><code>FileOpen(FileName, &quot;rw&quot;)
File.Write(TestString)
File.Close()</code></pre></div><p>Запись оч. часто не срабатывала.<br /></p><div class="codebox"><pre><code>особенно на 32-битных платформах, где вовсе нельзя адресовать больше 4гб(т.е. можно, но windows этого не делает  ), а приложению из них всего 2 достаётся.</code></pre></div><p>Раньше в командной строке правил на Windows 7 32-бит для игрушки надо было, больше двух гб точно можно:<br /></p><div class="codebox"><pre><code>bcdedit /set increaseuserva 3500</code></pre></div><p> разрешить 3.5 гиг. под приложение.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-26T12:39:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70805#p70805</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70804#p70804" />
			<content type="html"><![CDATA[<p><strong>Александр_</strong><br />Ну, поскольку<br /></p><div class="quotebox"><blockquote><p>Требуется для частного случая. Килобайт 100-200 текстовых файлов архивировать и обратно.</p></blockquote></div><p>то проблемы с размером файлов не грозят.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-03-26T12:00:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70804#p70804</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70802#p70802" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><div class="codebox"><pre><code>outfile := FileOpen(archive, &quot;w&quot;)</code></pre></div></blockquote></div><p>здорово, я и не знал что появился нормальный класс для работы с файлами. Ещё может возникнуть проблема при считывании большого файла - может просто не хватить памяти, особенно на 32-битных платформах, где вовсе нельзя адресовать больше 4гб(т.е. можно, но windows этого не делает <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> ), а приложению из них всего 2 достаётся.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-03-26T11:44:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70802#p70802</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70796#p70796" />
			<content type="html"><![CDATA[<p>Предложение Александра проще, поэтому пример по нему. Для простоты не стал делать проверок на ошибки. Вообще же, значение, возвращаемое FileOpen, надо бы проверять на 0.<br /></p><div class="codebox"><pre><code>files = file1.txt, file2.txt, file3.txt ; Список файлов.
archive = arch.txt                      ; Имя файла архива.

; Вызовы функций

pack(files, archive)
unpack(archive)

; Функции

pack(infiles, archive)      ; Архивация
{
    outfile := FileOpen(archive, &quot;w&quot;)           ; Открыть архив на запись.
    Loop, Parse, infiles, `,, %A_Space%         ; Разбор списка файлов.
    {
        infile := FileOpen(A_LoopField, &quot;r&quot;)    ; Открыть входной файл на чтение.
        length := infile.Length()               ; Измерить.
        infile.RawRead(data, length)            ; Считать в переменную.
        infile.Close()                          ; Закрыть.

        ; Запись в архив
        outfile.WriteInt(StrLen(A_LoopField))   ; Длина имени файла.
        outfile.Write(A_LoopField)              ; Имя файла.
        outfile.WriteInt(length)                ; Размер файла.
        outfile.RawWrite(data, length)          ; Содержимое файла.
    }
    outfile.WriteInt(0)     ; Конец архива.
    outfile.Close()         ; Закрыть архив.
}

unpack(archive)         ; Разархивация
{
    infile := FileOpen(archive, &quot;r&quot;)        ; Открыть архив.
    Loop
    {
        nameLength := infile.ReadInt()      ; Длина имени файла.
        If (nameLength = 0)                 ; Если 0, то конец архива.
            Break
        name := infile.Read(nameLength)     ; Имя вложенного файла.
        bytes := infile.ReadInt()           ; Размер вложенного файла.
        infile.RawRead(data, bytes)         ; Содержимое файла.

        outfile := FileOpen(name, &quot;w&quot;)      ; Создать файл.
        outfile.RawWrite(data, bytes)       ; Записать содержимое.
        outfile.Close()                     ; Закрыть.
    }
    infile.Close()      ; Закрыть архив.
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-03-26T11:08:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70796#p70796</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70795#p70795" />
			<content type="html"><![CDATA[<p>Все функции уже не раз применялись:<br /></p><div class="quotebox"><blockquote><p>1. получаем входные данные, создаём выходной файл(функция CreateFile)<br />2. выбираем файл для &quot;архивации&quot;, если таких нет то переходим к пункту 9<br />3. вычисляем имя файла в архиве по оригинальному имени<br />4. записываем длину полученного на шаге 3 имени(функция WriteFile)<br />5. записываем имя файла(без завершающего нуля).<br />6. находим длину обрабатываемого файла и записываем её в выходной файл.<br />7. пишем содержимое обрабатываемого файла в выходной файл.<br />8. переход на шаг 2<br />9. записываем ноль вместо длины имени файла.<br />10. освобождаем ресурсы(освобождаем выделенную память, закрываем дескрипторы).</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-03-26T11:08:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70795#p70795</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Архивация файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=70785#p70785" />
			<content type="html"><![CDATA[<p><em>Архивация:</em><br />вход - Несколько выбранных текстовых файлов в папке скрипта. <br />выход - Один текстовый файл.</p><p><em>Разархивация:</em><br />вход - Тот самый один текстовый файл.<br />выход - Несколько тех самых текстовых файлов в папке скрипта с такими же именами.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-26T07:06:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=70785#p70785</id>
		</entry>
</feed>
