![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с файлами
djkondakov © (2009-07-21 14:14:00)Здравствуйте! Возникла проблема: при попытке открыть файл для чтения происходит ошибка 103 (Файл не открыт). Как можно исправить?
djkondakov (2009-07-21 14:25:00) [21]Процедура должна извлечь файлы, которые упакованы к конец экзешника. Сначала находится текстовый лог-файл, в котором указаны все упакованные файлы и их размеры, затем подсчитывается сумма их размеров, чтобы правильно найти начальную точку извлечения. Затем, собстно, извлекаются файлы.
djkondakov (2009-07-21 14:21:00) [22]
procedure TForm2.Button1Click(Sender: TObject);
var
f, fsource: file of byte;
fprom: textfile;
strbuf: string;
fname, fsize: string;
buf: byte;
pstn: longint;
i, j: longint;
begin
try
{Чтение списка файлов}
showmessage('Чтение списка файлов');
assignfile(fprom, paramstr(0));
reset(fprom);
while not eof(fprom) do begin
readln(fprom, strbuf);
if strbuf='<Begin of Log File>' then begin
while (not eof(fprom)) and (strbuf<>'<End of Log File>') do begin
readln(fprom, strbuf);
if strbuf<>'<End of Log File>' then begin
fname:=copy(strbuf, 1, pos('#', strbuf)-1);
listbox1.Items.Add(fname);
fsize:=copy(strbuf, pos('#', strbuf)+1, length(strbuf));
listbox2.Items.Add(fsize);
end;
end;
end;
end;
closefile(fprom);
showmessage('Чтение завершено');
{Чтение списка файлов завершено}
assignfile(fsource, paramstr(0));
showmessage('Файл назначен');
reset(fsource);
showmessage('Файл открыт');
{Подсчет позиции в файле}
showmessage('Подсчет позиции');
for I := 0 to Listbox2.Count - 1 do
pstn:=pstn+strtoint(listbox2.Items[i]);
pstn:=filesize(fsource)-pstn;
showmessage('Подсчет завершен');
{Позиция высчитана}
{Начало распаковки}
showmessage('Начало распаковки');
seek(fsource, pstn);
for j := 0 to Listbox1.Count - 1 do begin
assignfile(f, listbox1.Items[j]);
rewrite(f);
for I := 1 to strtoint(listbox2.items[j]) do begin
read(fsource, buf);
write(f, buf);
end;
closefile(f);
end;
showmessage('Распаковка завершена');
{Распаковка завершена}
finally
closefile(fsource);
end;
end;
Dennis I. Komarov (2009-07-21 14:16:00) [23]исправь ошибку в 17-й строке