Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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]


> нельзя прочитать используя TextFile


program 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.005 c
1-1218019601
TNT
2008-08-06 14:46
2009.09.27
OleConteiner - печать документа


15-1248873578
Reactor
2009-07-29 17:19
2009.09.27
Подскажите про трасерт


1-1216368170
Zhekson
2008-07-18 12:02
2009.09.27
Как в InputBox_е изменить шрифт ???


1-1217825859
TNT
2008-08-04 08:57
2009.09.27
OleContainer и поток


15-1248813004
Юрий
2009-07-29 00:30
2009.09.27
С днем рождения ! 29 июля 2009 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский