サーバー上にあるファイルを要求クライアント上にダウンロードしたいのですが、どのようにすればいいのかわかりません。WinInetクラスを用いればいいということはわかるのですが、サーバー(http://***.***.***/~)のファイル(***)をダウンロードするという具体的なロジックが、知識不足からか組むことができません。

どなたかご教授ねがえませんでしょうか?よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

いくつか質問から...


 WININETクラスを使用するって事は、VC6.0でいいのかな?
 動作させたいOSは?
 IE4.0以降が必須になるけど問題ない?
 どの当りが解らないの?

 ロジックもないもないと思うけど...ヘルプに例から全部載っていますが...それでは不足なのでしょうか
VCのヘルプで、『インターネットのプログラミング : WinInet』で検索すると出て来ます。
以下、サンプルソース抜粋
-----------
//assumes server, port and URL names have been initialized
CInternetSession session("My Session");
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try{
CString strServerName;
INTERNET_PORT nPort;
pServer = session.GetHttpConnection(strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
pFile->AddRequestHeaders(szHeaders);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_OK) {
UINT nRead = pFile->Read(szBuff, 1023);
while (nRead > 0){
//read file...
}
}
delete pFile;
delete pServer;
}
catch (CInternetException* pEx){
//catch errors from WinInet
}
session.Close();

この回答への補足

早速の回答ありがとうございました!!
回答内容を参考にやってみます。

補足ですが、
使用ツールはVC6.0 対応OSは9Xシリーズ・2000・Meです。

buffにファイルデータを格納した後、クライアントの指定フォルダの中に保存するにはどのようにすればよろしいのでしょうか?
さらにさらに、
ダウンロード中によく表示される進行状況をあらわすバーはどのように組めばよろしいのでしょうか?

初心者という事をいいことに質問ばかりしてしまい、申し訳ありません。

補足日時:2001/06/01 15:23
    • good
    • 0

APIを使うだけで十分かと思います。

サンプルは山のように転がって
いますが、そのうちのひとつを参考URLに紹介します。

参考URL:http://tokyo.cool.ne.jp/masapico/api_InternetOpe …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qダウンロード支援フリーソフトについて

ダウンロード支援フリーソフトについて
色々なダウンロード支援フリーソフトを試しましたが私の設定が良くないのか私の思うようにダウンロード出来ません、おすすめのダウンロード支援フリーソフト・設定を教えてください。

用途としてはインターネットのページ上でサムネイル化されている画像を大きいサイズで保存したいのです、上記のとおり一通りフリーソフトを試しましたがサムネイルサイズの小さい画像しか保存できず困っています。

フリーソフト等を使ってサムネイル化された画像を元々のサイズで保存する方法はないのでしょうか?出来るのなら出来るフリーソフト・設定を教えて下さい。

質問内容が分かりにくく大変申し訳ありません。

Aベストアンサー

そのサムネイルは大きい画像へのリンクになっていますか?

小さいサムネイル画像しか持たない(リンクしていない)画像だったらどんなソフトを使っても小さな画像しか得られませんので

http://www.flashget.com/index_jp.htm

Qクライアント上のC++でサーバーとソケット送信

クライアント(Windows7)上でC++を使って、サーバー側(Windows)に対してデータを送りたいです
(ソケット通信?)。

サーバ受信側はC#を使ったプログラムで以下のような感じで考えてます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      int port = 2222;
      System.Net.IPAddress ip = IPAddress.Parse("127.0.0.1");
      System.Net.Sockets.TcpListener server = new TcpListener(ip, port);
      Console.WriteLine("Enter押してください");
      ConsoleKeyInfo info = Console.ReadKey();
      if (info.Key == ConsoleKey.Enter)
      {
        Console.WriteLine("サーバー待機中");
        server.Start();
        TcpClient client = server.AcceptTcpClient();

        NetworkStream ns = client.GetStream();
        StreamWriter sw = new StreamWriter(ns);

        Console.WriteLine(sw);
      }
    }
  }
}

C++のことがよくわかってないので、送信側でC++を使ってどのように
送信すればいいのかわかりません。

送信するデータはINT型で、1秒間に1回、繰り返し送ります。

よろしくお願いします。

クライアント(Windows7)上でC++を使って、サーバー側(Windows)に対してデータを送りたいです
(ソケット通信?)。

サーバ受信側はC#を使ったプログラムで以下のような感じで考えてます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      int port = 2222;
     ...続きを読む

Aベストアンサー

winsock の関数を使用します。

winsock tcp などのキーワードで、ネットを探せばサンプルはすぐ見つかります。

Qフリーソフトをダウンロード,なのに有償版のアイコンがある…

お教えください。

ラスター・ベクター変換で
http://www.softsoft.net/wintopo/dl-wintopo.htm
という英国のWinTopo Freeware 1.7というフリーソフトをダウンロードしました。

ですが,インストールを終えてみるとWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがうまれているのです。

どこかで間違った手続きをしたのでしょうか?

特に変わったこともなくダウンロードして,インストールをしました。 

そして,サイトがすべて英語なのでわかりづらくて困っています。

フリーソフトのみをダウンロードしたつもりなのにWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがあることや,間違いダウンロードをしてしまったかもしれないということについて尋ねたくてもどうしてよいかわかりません。

これは請求されるのでしょうか?

もし,ダウンロードミスをしていた場合,これは間違 いダウンロードだとしてダウンロードを返上,撤回す るのはどうすればよいでしょうか?

お教えください。

ラスター・ベクター変換で
http://www.softsoft.net/wintopo/dl-wintopo.htm
という英国のWinTopo Freeware 1.7というフリーソフトをダウンロードしました。

ですが,インストールを終えてみるとWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがうまれているのです。

どこかで間違った手続きをしたのでしょうか?

特に変わったこともなくダウンロードして,インストールをしました。 

そして,サイトがすべて英語なのでわかりづらくて困ってい...続きを読む

Aベストアンサー

正常です。

私もインストールしたことがありますが、たしかその有償版は期間限定だか機能限定だかの試用版のはずです。
一緒にインストールされる旨どこかに書かれていたと思います。

Qいつもお世話になっております。http://oshiete.goo.n

いつもお世話になっております。http://oshiete.goo.ne.jp/qa/5836517.htmlで質問させているものです。

皆さんのアドバイスを頂き、2分探索法で郵便番号から住所を検索するプログラムが出来たのですが、
住所から郵便番号を2分探索法で出すプログラムも同じ方法でやろうとしましたが、比較対象が漢字の為、大きい・小さいの判断できずに上手くプログラムが出来ていません。

csvファイルは読みデータをひとつに繋げてあいうえお順にソートしました

プログラムを一部載せておきます(かなり省略済みですが…)
#define NAME ken_all_address.csv

int main(int argc,char *argv[])
{
struct tb line;
FILE *fp;
char buff[SIZE], string_buff[SIZE];
char *address,*ret;
int flag,linesu,linesu1,sum,count,up,up1,low,low1,center,center1;
int i,j;
long pos[FSIZE];

clock_t start,end;

start = clock();
//引数処理
if((fq=fopen(NAME1,"r")) == NULL){
printf("ファイル%sが開けません\n",NAME1);
return -1;
}

if((fp=fopen(NAME,"r")) == NULL){
printf("ファイル%sが開けません\n",NAME);
return -1;
}

flag = 0;
address = argv[1];

count=0;
sum=0;

if(atoi(address) == 0){
for(i=0; ;i++){
pos[i] = ftell(fq);
ret=fgets( buff, sizeof(buff), fp );

if(ret==NULL){
break;
}
}
linesu = i;

//printf("%d",linesu);

low=0;
up=linesu-1;

while(low <= up){
center=(up+low)/2;
fseek(fq,pos[center-1],SEEK_SET);
fgets( buff, sizeof(buff), fp );

strtok(buff,",\"");
strtok(NULL,",\"");
strcpy(line.now_num,strtok(NULL,",\""));
strtok(NULL,",\"");
strtok(NULL,",\"");
strtok(NULL,",\"");
strcpy(line.kanji1,strtok(NULL,",\""));
strcpy(line.kanji2,strtok(NULL,",\""));
strcpy(line.kanji3,strtok(NULL,",\""));

strcpy(string_buff,line.kanji1);
strcat(string_buff,line.kanji2);
strcat(string_buff,line.kanji3);

printf("%s %s %s\n",line.kanji1,line.kanji2,line.kanji3);

if(strcmp(string_buff,address)==0){
printf("〒%s \n",line.now_num);
flag=1;
}
if(strstr(string_buff,address) ==NULL){
low=center+1;
}
else{
up=center-1;
}
}
}
fclose(fp);

if(flag==0 && atoi(argv[1]) == 0){
printf("「%s」に該当する郵便番号はありませんでした\n",address);
}

if(flag==0 && atoi(argv[1]) != 0){
printf("「%s」に該当する住所はありませんでした\n",address);
}

end = clock();

printf("引数=%s\n",address);
printf("%.30f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC);
printf("fgetsの実行回数=%d回\n",sum);
printf("比較回数=%d回\n",count);
printf("\n");

return 0;
}

いつもお世話になっております。http://oshiete.goo.ne.jp/qa/5836517.htmlで質問させているものです。

皆さんのアドバイスを頂き、2分探索法で郵便番号から住所を検索するプログラムが出来たのですが、
住所から郵便番号を2分探索法で出すプログラムも同じ方法でやろうとしましたが、比較対象が漢字の為、大きい・小さいの判断できずに上手くプログラムが出来ていません。

csvファイルは読みデータをひとつに繋げてあいうえお順にソートしました

プログラムを一部載せておきます(かなり省略済みですが…)
#de...続きを読む

Aベストアンサー

 strcmpの返り値は文字列を文字コードで比較しての大小関係です。
 ただし、漢字の文字コードは必ずしも「あいうえお順」じゃないので、そのままでは2分探索法では検索出来ないでしょう。

 この場合は普通はデータに「読み方」のフィールドを追加し、そこに住所をひらがな(あるいはカタカナ)で記載し、それを使って2分探索法で検索します。
 別のやり方としては、CSVファイルを「あいうえお順」ではなく「文字コード順」にソートしたものを使って検索する方法もあります。

Q「着もと」というフリーソフトのダウンロードサイトが開けなく、ソフトがダ

「着もと」というフリーソフトのダウンロードサイトが開けなく、ソフトがダウンロードできません。
着もとのように着信音設定を可能にするフリーソフトがあれば教えていただけないでしょうか?

Aベストアンサー

http://www.vector.co.jp/soft/dl/winnt/art/se460732.html
ここからどうぞ

Qsshクライアントで接続先で開いたウィンドウもクライアント側で表示できるもの

sshクライアントで接続先で開いたウィンドウもクライアント側で表示できるものを探しています。(説明ヘタクソですみません)

普段はTera Termを使っているのですが、OpenGLのプログラムを動かしたいので上記のようなソフトがほしいのです。

よろしくお願いします。

Aベストアンサー

クライアント側で、Xサーバーを動かします。サーバー側でプログラム起動時にDISPLAY環境変数で、192.168.0.1:0.0 のようにディスプレイ名を指定します。
「Windows Xサーバー」で検索してみてください。フリーの物、有償の物があります。

Qベクターのフリーソフトがうまくダウンロードできない

ベクターのフリーソフトを手順どうりダウンロードして 解凍ソフトを重ねて
解凍してみると何故か全て、エキサイト壁紙マネジャーの絵になります。
どんな、フリーソフトをダウンロードしても全部 壁紙マネジャーになるのです
なぜでしょうか?教えてください

Aベストアンサー

壁紙マネジャーを終了してから ダウンロードしてみては いかがでしょうか?
そのソフトが 余計なことをしているのかもしれません。

Qブラウザ上でクライアント側で動くアプリの開発

現在、ブラウザ上でクライアント側で動くアプリを作りたいと考えているのですが、JAVA ScriptやFlashでは簡単にソースを見られてしまいます。
そのため、C#.NETとかで作れないかと考えているのですが、可能でしょうか?
可能でしたら、どの様にして作成すればいいでしょうか?
また、Cを使う以外に、もっと良い方法があるのならその方法を教えて欲しいです

よろしくお願いします。

Aベストアンサー

Win32プロジェクトを選ぶとWindowアプリになるはずです。ただし、ダイアログ(フォームとほぼ同等)などのリソースをエディットできるのは有料のスタンダード以上のエディションである必要があります。
ただ、Win32プロジェクトは手間が掛かりますのでC#に比べると面倒な作業になります。
MFCプロジェクトならクセはありますが、C#やC++/CLIのフォームと同じような事が出来ます。これも有料のスタンダード以上のエディションである必要があります。

>また、もし無理なら、インターフェイスの部分だけはMSILでつくって、ネイティブコードで作れる部分は、ネイティブコードで作るといったことは可能でしょうか?
やったことは無いですが可能なはずです。どうすれば良いかは私も知らないので再度質問してみてください。

Qベクターのあるフリーソフトのダウンロード法

訳があって デザインした文字をTシャツに昇華プリント加工する必要に迫られ しかも「立体文字」を
デザインする必要に迫られ ウェブサイトをさまよってると ベクターのフリーソフト「もこもこ」なるサイトに出会いました。
http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005196.html
フリーソフトと分かって 喜びいさんでダウンロード
しようとして うまくダウンロード出来ません。
ウェブ上の「ダウンロード」の項をクリックしても
うまくダウンロード出来ません。
実は ベクターのフリーソフトをダウンロードした
経験ゼロです。ひょっとして 事前の会員登録制?
なのでしょうか。
どなたか 御教示 お待ちしています。
PS。「ラーサプラス」なる解凍ソフトは
   インストール済みです。

Aベストアンサー

最近「Vアップ通知」なるサービスが開始され、ダウンロードを開始する前に、そのサービスの案内ページが挿入されるようになりました。
このページで「登録するとバージョンアップの連絡…」などの文面があるのでそれで迷われたのでしょうか?
案内ページの下にある「いまは登録しない」ボタンを押すととりあえずダウンロードが開始されますよ。

自分も変更直後に「登録が必要になったのか?」と勘違いし少しハマりました(^^;

QDirectXを用いたActiveXを用いてVistaで情報が取れない

ActiveXからDirectXを叩いてOSやCPUなどの情報を
取得しようとしています。
XPでは問題なく情報が取れますが、Vistaでは
情報が取れる項目と取れない項目があります。
この現象について、教えてください。

APIは正常に終了しています。
OS(szOSExLongEnglish) → 正常取得
ベンダー(szSystemManufacturerEnglish) → n/a
型番(szSystemModelEnglish) → n/a
CPU(szProcessorEnglish) → (空白)
物理メモリ(szPhysicalMemoryEnglish)  → 正常取得

IEのデフォルトの設定では上記のような状態ですが、
設定を変えて保護モードを外すと正常動作し、
すべての情報が取得できます。
しかし、保護モードが有効の状態で、
情報取得したいです。

以下にコードを書きます。
※このコードはあるサンプルソースをほとんどそのまま使っています。
////////////////////////////////////////////////////////////////////////////////
//初期化
////////////////////////////////////////////////////////////////////////////////
bool CDxDiagLib::Init(void)
{
HRESULT hr;
DXDIAG_INIT_PARAMS dxDiagInitParam;

m_pDxDiagProvider = NULL;
m_pDxDiagRoot = NULL;
g_DxDiagInfo = NULL;
g_DxSoundInfo = NULL;

// COMライブラリを使用できるように初期化
hr = CoInitialize(NULL);
if (FAILED(hr))
{
return false;
}

hr = CoCreateInstance( CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, IID_IDxDiagProvider, (LPVOID*) &m_pDxDiagProvider);
if( FAILED(hr) || m_pDxDiagProvider == NULL)
{
return false;
}

// DXDIAG_INIT_PARAMSを初期化
ZeroMemory( &dxDiagInitParam, sizeof(DXDIAG_INIT_PARAMS) );
dxDiagInitParam.dwSize = sizeof(DXDIAG_INIT_PARAMS);
dxDiagInitParam.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION;
// WHQLを確認するかどうか
// ネットを経由するので基本的にはfalseにしておく
dxDiagInitParam.bAllowWHQLChecks = AllowWHQLChecks;
dxDiagInitParam.pReserved = NULL;

hr = m_pDxDiagProvider->Initialize( &dxDiagInitParam );
if( FAILED(hr) )
{
return false;
}

hr = m_pDxDiagProvider->GetRootContainer( &m_pDxDiagRoot );
if( FAILED(hr) )
{
return false;
}

return true;
}

////////////////////////////////////////////////////////////////////////////////
//DxDiag でSystem情報を取得
////////////////////////////////////////////////////////////////////////////////
bool CDxDiagLib::GetSyatemInfo( void )
{
HRESULT hr;
IDxDiagContainer* pObject = NULL;
DWORD nInstanceCount = 0;
DWORD nItem = 0;
DWORD nCurCount = 0;

// "DxDiag_SystemInfo" を取得
if( FAILED( hr = m_pDxDiagRoot->GetChildContainer( L"DxDiag_SystemInfo", &pObject ) ) )
{
return false;
}

// 情報保存領域の確保
ZeroMemory(&g_DxDiagSysInfo, sizeof(g_DxDiagSysInfo));

if( FAILED( hr = GetStringValue( pObject, L"szOSExLongEnglish", g_DxDiagSysInfo.cOS , sizeof(g_DxDiagSysInfo.cOS) ) ) )
{
SAFE_RELEASE( pObject );
return false;
}

if( FAILED( hr = GetStringValue( pObject, L"szSystemManufacturerEnglish", g_DxDiagSysInfo.cManufacturer , sizeof(g_DxDiagSysInfo.cManufacturer) ) ) )
{
SAFE_RELEASE( pObject );
return false;
}

if( FAILED( hr = GetStringValue( pObject, L"szSystemModelEnglish", g_DxDiagSysInfo.cModel , sizeof(g_DxDiagSysInfo.cModel) ) ) )
{
SAFE_RELEASE( pObject );
return false;
}

if( FAILED( hr = GetStringValue( pObject, L"szProcessorEnglish", g_DxDiagSysInfo.cProcessor , sizeof(g_DxDiagSysInfo.cProcessor) ) ) )
{
SAFE_RELEASE( pObject );
return false;
}

if( FAILED( hr = GetStringValue( pObject, L"szPhysicalMemoryEnglish", g_DxDiagSysInfo.cMemory , sizeof(g_DxDiagSysInfo.cMemory) ) ) )
{
SAFE_RELEASE( pObject );
return false;
}

SAFE_RELEASE( pObject );

return true;
}

よろしくお願いいたします。

ActiveXからDirectXを叩いてOSやCPUなどの情報を
取得しようとしています。
XPでは問題なく情報が取れますが、Vistaでは
情報が取れる項目と取れない項目があります。
この現象について、教えてください。

APIは正常に終了しています。
OS(szOSExLongEnglish) → 正常取得
ベンダー(szSystemManufacturerEnglish) → n/a
型番(szSystemModelEnglish) → n/a
CPU(szProcessorEnglish) → (空白)
物理メモリ(szPhysicalMemoryEnglish)  → 正常取得

IEのデフォルトの設定では上記のような状態ですが...続きを読む

Aベストアンサー

>一般ユーザでログインしているケースでActiveX
>で実行する際、アカウントとパスワードを要求されるということ
>でしょうか?

アイコンクリックのプログラム起動時のオプションメニューや、ショートカットのオプションに「管理者として実行」とか「特権レベルの管理者として実行」と言うのがありますね。

これは、実行時の権限を変更して実行している訳ですが、この権限変更の際に「権限変更API関数に、アカウント名やパスワードなどのユーザー情報を渡す必要がある」のです。

保護されたシステム情報を取得するのであれば、同様に、特権レベルで情報を取得しなければなりません。

通常、特権管理者としてビルトインユーザーである「Administrator」が居る筈なので、このアカウントを使用して権限(特権)を得て、特権レベルで保護された項目にアクセスします。

この時、もし「Administrator」アカウントにパスワードによる保護がかかってないのであれば(パスワードが設定してないならば)「権限変更API関数に、アカウント名やパスワードなどのユーザー情報を渡す時に、パスワードを無しにすれば良い」ので、ユーザーに問い合わせる必要はありません。

もし、パスワード保護してあるなら、パスワード無しで権限変更しようとした時にエラーで返ってくるので「パスワードの問い合わせAPI関数や、ユーザー情報の取得API関数を呼んで、アカウントとパスワードを入力するシステムダイアログを出させる」などでパスワードを取得し、それを元に権限を変更しなければなりません。

要は「パスワードが必要なら、アプリケーション自身でアカウントとパスワードを要求しに行く必要がある」って事です。

まあ、ユーザー情報の取得API関数のように、呼んだら勝手にアカウントとパスワードを聞いてくるAPI関数もありますが、この関数を呼ぶ事自体が「アプリケーション自身でアカウントとパスワードを要求しに行く」ってのと同義なので(^^;

以下蛇足。

普通、一般的な使い方をしているパソコンなら「Administrator」にパスワードは掛かってません。

何故なら「Administratorというアカウントが存在している事さえ知らないユーザー」が多いので、パスワード無いのが殆どです。

>一般ユーザでログインしているケースでActiveX
>で実行する際、アカウントとパスワードを要求されるということ
>でしょうか?

アイコンクリックのプログラム起動時のオプションメニューや、ショートカットのオプションに「管理者として実行」とか「特権レベルの管理者として実行」と言うのがありますね。

これは、実行時の権限を変更して実行している訳ですが、この権限変更の際に「権限変更API関数に、アカウント名やパスワードなどのユーザー情報を渡す必要がある」のです。

保護されたシステム...続きを読む


人気Q&Aランキング

おすすめ情報