Форум: "Начинающим";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];
ВнизПроблема с файлами Найти похожие ветки
← →
djkondakov (2009-07-21 14:14) [0]Здравствуйте! Возникла проблема: при попытке открыть файл для чтения происходит ошибка 103 (Файл не открыт). Как можно исправить?
← →
Dennis I. Komarov © (2009-07-21 14:16) [1]исправь ошибку в 17-й строке
← →
djkondakov (2009-07-21 14:21) [2]
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;
← →
djkondakov (2009-07-21 14:25) [3]Процедура должна извлечь файлы, которые упакованы к конец экзешника. Сначала находится текстовый лог-файл, в котором указаны все упакованные файлы и их размеры, затем подсчитывается сумма их размеров, чтобы правильно найти начальную точку извлечения. Затем, собстно, извлекаются файлы.
← →
djkondakov (2009-07-21 14:26) [4]Ошибка происходит где-то в районе строки, выделенной жирным, т.к. сообщение "Файл назначен" выводится, а "Файл открыт" - нет.
← →
Anatoly Podgoretsky © (2009-07-21 14:32) [5]> djkondakov (21.07.2009 14:21:02) [2]
В какой строке ошибка
← →
djkondakov (2009-07-21 14:37) [6]35-я строка. Выделена жирным.
← →
Игорь Шевченко © (2009-07-21 14:38) [7]
> Ошибка происходит где-то в районе строки
отладчика нет/не знаешь/пусть лохи пользуются ?
перед строкой вставить
FileMode := 0
← →
Anatoly Podgoretsky © (2009-07-21 14:53) [8]
> 35-я строка. Выделена жирным.
У тебя нет прав
← →
djkondakov (2009-07-21 15:00) [9]Так. Теперь в 46-й строке ошибка 131 (Первый раз о такой слышу - I/O Error 131). Отладчик заюзать не могу, так как приходится сначала "запихивать" в полученный экзешник файлы с помощью пакера, а потом уже запускать.
← →
Anatoly Podgoretsky © (2009-07-21 15:22) [10]Неумение пользоваться справкой, отладчиком и прочим.
Неверно выбран тип файлов, неверная работа с буферами.
Тут наиболее подходит TFileStream и чтение одним блоком.
А ошибка "отричательное позиционирование" с этим в отладчик, но лучше переписать все нафиг.
← →
Юрий Зотов © (2009-07-21 15:26) [11]
assignfile(fprom, paramstr(0));
reset(fprom);
EXE открывает для чтения себя же?
← →
Anatoly Podgoretsky © (2009-07-21 15:31) [12]> Юрий Зотов (21.07.2009 15:26:11) [11]
При том в текстовом режиме! и с монопольными шаринг свойствами.
Это у него будет следующая проблема, когда сможет пробраться через остальной ужас.
← →
djkondakov (2009-07-21 15:36) [13]Да, я нашел свою ошибку. И последующие тоже. И, кстати, что такого в том, что экзешник сам себя читает? Разве инсталлеры так не делают?
← →
Юрий Зотов © (2009-07-21 15:43) [14]> djkondakov (21.07.09 15:36) [13]
В режиме чтения и не текстовый. А у Вас?
← →
Anatoly Podgoretsky © (2009-07-21 15:45) [15]> djkondakov (21.07.2009 15:36:13) [13]
В текстовом режиме?
← →
djkondakov (2009-07-21 15:48) [16]Гхм... то есть exe нельзя прочитать как текстовик? Открыв упакованный файл в Notepad ++, я спокойно нашел свой лог-файл.
← →
Anatoly Podgoretsky © (2009-07-21 16:01) [17]> djkondakov (21.07.2009 15:48:16) [16]
Ну а теперь попробуй в Notepad без плюсов
← →
djkondakov (2009-07-21 16:10) [18]Тоже нашел. Правда, был Notepad2 (Винда такая, Самлабовская).
← →
Palladin © (2009-07-21 16:10) [19]
> то есть exe нельзя прочитать как текстовик?
нельзя прочитать используя TextFile
← →
Игорь Шевченко © (2009-07-21 16:34) [20]Palladin © (21.07.09 16:10) [19]
> нельзя прочитать используя TextFileprogram ReadExe;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
F: TextFile;
S: string;
I: Integer;
begin
AssignFile(F, ParamStr(0));
FileMode := 0;
Reset(F);
I := 0;
while not Eof(F) do
begin
readln(F, S);
Inc(I);
end;
writeln(I, " строк в ", ParamStr(0));
end.
13 строк в C:\Documents and Settings\Мои документы\Borland Studio Projects\TESTS\ReadExe\ReadExe.exe
← →
Palladin © (2009-07-21 16:35) [21]а ты попробуй
← →
Palladin © (2009-07-21 16:36) [22]хотя могу предположить, что механизм в какой то из версий, старше седьмой, поменяли...
← →
Anatoly Podgoretsky © (2009-07-21 16:54) [23]> Palladin (21.07.2009 16:36:22) [22]
Ты хочешь сказать, что они положили на текстовые файлы неизвестной длины, например на COMx
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c