![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ошибка i/o при работе с браузером на delphi [D7, WinXP]
im-13 © (2005-07-11 17:33:00)написал стандартную программу на делфе, которая открывает браузер по заданному url, после чего весь html-код копируется в файл(test.html) для посдедующего редактирования, но после того как файл создается(test.html) он не может открытся assignfile, т.е. любая попытка прочитать строку заканчивается ошибкой i/o error 104, в чем может быть проблема помогите!!!???
код:
var f,test,f2:textfile;
s,s1,s2,s3,s4:string;
i,j,size:integer;
p1,p2,fl1,fl2:integer;
begin
j:=0;
assignfile(f,'D:\2.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
s1:=s;
chdir('D:\');
for i:=0 to length(s) do
begin
if s[i]=' ' then s[i]:='+';
end;
repeat
WebBrowser1.Navigate('url');
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
memo1.Lines.add('Done');
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
str(j,s2);
PersistFile.Save(StringToOleStr('D:'test.html'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
assignfile(f2,'D:\'test.html');
size:=FileSize(f2);
closefile(f2);
inc(j);
until size<>3559;
{
reset(test);
assignfile(f2,'D:\'1.txt');
rewrite(f2);
while not eof(test) do
im-13 (2005-07-11 18:31:00) [1]дело в том что хоть что там будет программа не доходит до этого кода она останавливается на первой попытке доступа к файлу test
begin...end (2005-07-11 18:26:00) [2]> im-13 (11.07.05 18:21) [8]
> fl1:=1;
> while fl1=1do
> begin
> readln(test,s2);
> ...
Бесконечный цикл, выход за границы файла test.
im-13 (2005-07-11 18:24:00) [3]и еще
при этом файл f2 открывается нормально
im-13 (2005-07-11 18:21:00) [4]ладно с filesize - это так попытка из ничего
я тут немного напутал с новой и старой версие программы
repeat
WebBrowser1.Navigate('url');
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
memo1.Lines.add('Done');
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
PersistFile.Save(StringToOleStr('D:\'test.html'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
---вот я его открываю----
assignfile(test,'D:\'test.html');
reset(test);
assignfile(f2,'D:\'1.txt');
rewrite(f2);
while not eof(test) do -- на этой строке(и на других подобных версия кода, например просто прочитать одну строку из test) происходит ошибка
fl1:=1;
while fl1=1 do
begin
readln(test,s2);
if copy(s2,length(s2)-7,7)='</html>' then fl1:=0;
p1:=1;
p2:=1;
while p1<>0 do
begin
p1:=pos(s2,'<li> <font size="-1"> ');
delete(s2,p1,22);
p2:=pos(s2,' </font> </li>');
delete(s2,p2,14);
s3:=copy(s2,p1,p2-p1);
writeln(f2,s3);
end;
closefile(f2);
closefile(test);
Плохиш (2005-07-11 18:16:00) [5]
> im-13 (11.07.05 18:08) [5]
FileSize + F1 читать до полного просветления
begin...end (2005-07-11 18:10:00) [6]> im-13 (11.07.05 18:08) [5]
> size:=FileSize(f2); - на этой строке происходит ошибка
Во-первых, файл f2 не открыт.
Во-вторых, FileSize не применим для текстовых файлов.
im-13 (2005-07-11 18:08:00) [7]если я не ошибаюсь программа перестает работать после этого кода:
PersistFile.Save(StringToOleStr('D:'test.html'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
assignfile(f2,'D:\'test.html');
size:=FileSize(f2); - на этой строке происходит ошибка - вообщето она просисходит всегда при попытке прочитать файл, в любом предстовлении,
если я правильно понял то мне нужно закрыть файл после
PersistFile.Save(StringToOleStr('D:'test.html'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
но как если я его не открывал до этого, а хочу открыть только после
im-13 (2005-07-11 17:42:00) [8]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ActiveX, MSHTML_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
WebBrowser1: TWebBrowser;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
HTMLDocument: IHTMLDocument2;
Document: ihtmlDocument2;
PersistFile: IPersistFile;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var f,test,f2:textfile;
s,s1,s2,s3,s4:string;
i,j,size:integer;
p1,p2,fl1,fl2:integer;
begin
j:=0;
assignfile(f,'D:\2.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
s1:=s;
chdir('D:\');
for i:=0 to length(s) do
begin
if s[i]=' ' then s[i]:='+';
end;
repeat
WebBrowser1.Navigate('url');
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
memo1.Lines.add('Done');
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
str(j,s2);
PersistFile.Save(StringToOleStr('D:'test.html'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
assignfile(f2,'D:\'test.html');
size:=FileSize(f2);
closefile(f2);
inc(j);
until size<>3559;
reset(test);
assignfile(f2,'D:\'1.txt');
rewrite(f2);
while not eof(test) do
fl1:=1;
while fl1=1 do
begin
readln(test,s2);
if copy(s2,length(s2)-7,7)='</html>' then fl1:=0;
p1:=1;
p2:=1;
while p1<>0 do
begin
p1:=pos(s2,'<li> <font size="-1"> ');
delete(s2,p1,22);
p2:=pos(s2,' </font> </li>');
delete(s2,p2,14);
s3:=copy(s2,p1,p2-p1);
writeln(f2,s3);
end;
closefile(f2);
closefile(test);
end;
end;
end;
end.
Плохиш (2005-07-11 17:41:00) [9]
> im-13 (11.07.05 17:33)
Файлы закрывать нужно
im-13 (2005-07-11 17:38:00) [10]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ActiveX, MSHTML_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
WebBrowser1: TWebBrowser;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
HTMLDocument: IHTMLDocument2;
Document: ihtmlDocument2;
PersistFile: IPersistFile;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var f,test,f2:textfile;
s,s1,s2,s3,s4:string;
i,j,size:integer;
p1,p2,fl1,fl2:integer;
begin
j:=0;
assignfile(f,'D:\2.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
s1:=s;
chdir('D:\');
for i:=0 to length(s) do
begin
if s[i]=' ' then s[i]:='+';
end;
repeat
WebBrowser1.Navigate('url');
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
memo1.Lines.add('Done');
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
str(j,s2);
PersistFile.Save(StringToOleStr('D:'test.html'), True);
while HTMLDocument.readyState <> 'complete' do
Application.ProcessMessages;
assignfile(f2,'D:\'test.html');
size:=FileSize(f2);
closefile(f2);
inc(j);
until size<>3559;
{
reset(test);
assignfile(f2,'D:\'1.txt');
rewrite(f2);
while not eof(test) do
fl1:=1;
while fl1=1 do
begin
readln(test,s2);
if copy(s2,length(s2)-7,7)='</html>' then fl1:=0;
p1:=1;
p2:=1;
while p1<>0 do
begin
p1:=pos(s2,'<li> <font size="-1"> ');
delete(s2,p1,22);
p2:=pos(s2,' </font> </li>');
delete(s2,p2,14);
s3:=copy(s2,p1,p2-p1);
writeln(f2,s3);
end;
closefile(f2);
closefile(test);
end; }
end;
end;
end.
begin...end (2005-07-11 17:36:00) [11]Переформулируйте вопрос.