皆様、いつもお世話になっております。
いま、インターネットのサイトのファイルをダウンロードして、保存するプログラムを作ろうと勉強しております。
URL(例http://www.borland.co.jp/)を与えてダウンロードを、URLDownLoadToFile()関数、InternetReadFile()関数、TIEDownloadなど試しましたが、いずれも最初のイニシャルファイルの名前をどうして取得したらいいか解りません(大抵はindex.htmか**.htmlですが)。
よろしくご指導をお願い致します。m(__)m
念のためURLDownLoadToFile()の例を記述しておきます。
procedure TForm1.ToolButton1Click(Sender: TObject);
var
p1: IUnknown;
p2,p3: PAnsiChar;
p4: DWORD;
p5: IBindStatusCallback;
result: HRESULT; //失敗したときの結果
begin
p1 := nil;
p2 := PCHAR('http://www.borland.co.jp/index.html'); // データ置き場
p3 := PCHAR('index.htm');//'index.txt'); // 保存先
p4 := 0; // ここは何があっても常に0
p5 := nil; // DL中にDialogを出すかどうか。大抵は邪魔なのでnil設定。
result :=URLDownLoadToFile(p1,p2,p3,p4,p5);
if (result=s_ok) then else ShowMessage('失敗しました');
end;
すみません。
記述に間違いがありましたので訂正させて頂きます。
URL指定は、具体的ファイル名はありませんでした。
procedure TForm1.ToolButton1Click(Sender: TObject);
var
p1: IUnknown;
p2,p3: PAnsiChar;
p4: DWORD;
p5: IBindStatusCallback;
result: HRESULT; //失敗したときの結果
begin
p1 := nil;
p2 := PCHAR('http://www.borland.co.jp/');// ←ここはファイル名無し
p3 := PCHAR('index.htm');//'index.txt'); // 保存先
p4 := 0; // ここは何があっても常に0
p5 := nil; // DL中にDialogを出すかどうか。大抵は邪魔なのでnil設定。
result :=URLDownLoadToFile(p1,p2,p3,p4,p5);
if (result=s_ok) then else ShowMessage('失敗しました');
end;
http://www.borland.co.jp/
のように、ファイル名を省略してアクセスした場合にどのようなファイルが送られてくるのかは、サーバーの設定で決まるもの。
例えば Apacheサーバーで、DirectoryIndex index.htm index.html index.cgi
と設定されていれば、サーバーのディレクトリの中を、
index.htm → index.html → index.cgi と順に検索して見つかったファイルを送り返してくれる。
というわけで、アクセス前にファイル名を特定することは出来ないし、特定する必要も無いと思うけど。(サイトのメンテナンスでファイル名が変わる場合もあるし)
どうしても特定したければ、末尾にindex.htm、index.htmlなどを付けてアクセスしてみること。
ボーランドサイトの場合は
http://www.borland.co.jp/index.html
ならWEBページが表示され、
http://www.borland.co.jp/index.htm
でアクセスすると「ページが見つかりません」となる。
名無しはイヤなの? さん、ご指導ありがとうございました。
サイトの約束事がやっと解りました。
サイトのイニシャルHTMLソースファイルをダウンロードするプログラムは出来たのですが、肝心のファイル名が解らないので、保存のしようがありませんでした。
オンラインソフトのダウンローダーは、ちゃんとhtmだったりhtmlだったり保存しているのでどうするのだろうと考えていました。
また教えてくださいm(__)m
ツイート | ![]() |