Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с файлами


Страницы:   1 2

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-й строке


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо