INETコントロールを使って、サーバとファイルの送受信をするアプリを作りたいのですが、基本的なところでつまづいています。

サンプルプログラムを見つけたので試してみているのですが。
以下。

Private Sub cmdDownload_Click()
Dim GetBuf() As Byte
Dim FileNum As Integer

GetBuf() = Inet.OpenURL(txtURL.Text, icByteArray)
FileNum = FreeFile
Open txtSavePath.Text For Binary Access Write As FileNum
Put #FileNum, , GetBuf()
Close #FileNum
MsgBox "ダウンロード終了"
End Sub

ここで、txtURL.Text に何を記述したらいいのか、はっきり分かりません。
サーバー名にファイルのあるディレクトリを付けた形、
ftp://servername/home/tmp/test.txt
サーバーのIPアドレスにファイルのあるディレクトリを付けた形、
ftp://172.20.1.17/home/tmp/test.txt
を試してみたのですが、うまくダウンロードできません。

目的のプログラムは Executeメソッドを使ってファイルの送受信をしたいのですが、どちらにしてもURLの記述ができないとダメなのですよね?
どうぞ、よろしくお願いいたします。

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

A 回答 (7件)

ご指名ありがとうございます。

(←変な飲み屋みたい)

こんな感じ?
  With Inet1
    .URL = "ftp://ftp.hoge.com"
    .UserName = "TAGOSAKU7"
    .Password = "内緒"
    .Execute , " DIR"
  End With

UserNameとPasswordは、ExecuteかOpenURLを発行すると同時に送られているようです。
UserNameが空状態であれば "anonymous"を送っているようです。

でも、
>"ftp://user:pwd@URL"
使用方法によってはいいと思いますよ。
画面にさえ表示しなければ・・・


それと、、、
受けのサーバのポートは特に意識する必要はないと思います。
WinSockでもないので、ソケットのことを考える必要もないし、手順を間違わなければサーバに設定を施さなくてもできると思います。

この回答への補足

ありがとうございます。
早速試してみます。
仕事先のことなので結果のご報告は夕方になりますが。

補足日時:2002/03/06 13:49
    • good
    • 0
この回答へのお礼

ありがとうございました。

Inet.OpenURL ではうまくいかないのですが、Inet.Execute ではうまくいきました。一行で書くと
Inet.Execute "ftp://username:password@hostname", "GET test.lzh e:\tmp\test.lzh"
みたいな感じです。
GET(ダウンロード)もPUT(アップロード)もこれでいけました。

もちろん
  With Inet1
    .URL = "ftp://ftp.hoge.com"
    .UserName = "TAGOSAKU7"
    .Password = "内緒"
    .Execute , " DIR"
  End With
の書き方でもOKでした。

ところが、問題点がふたつ。

1.ダウンロードやアップロードが終わってアプリケーションを終了するときに、
  Inet.Cancel を記述しているのですが、5秒ぐらいかかります。
  Private Sub Inet.StateCanged(Byval State As Integer) を記述すると
  なぜかすぐ終わります。解せません。
2.GET と PUT はうまくいくのですが、CD や DIR がちゃんと動きません。

まだ、分かっていないところがあるのだと思います。
またいろいろとやってみますが、何かお気づきのことがありましたらお教えください。取り敢えずお礼まで。

お礼日時:2002/03/06 18:56

なるほど・・・


でも、追記質問部分は自己解決できそうですね^^
サーバの戻りは基本的にStateChangedで行います。

もうひとつの質問
http://oshiete1.goo.ne.jp/kotaeru.php3?q=227737
については、そちらに書いておきます。(回答ではないけど・・・)
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
お蔭様で同期をとることですべて解決しました。
アドバイスはとても有難かったです。

お礼日時:2002/03/08 20:52

※追記質問1について


ごめんなさい。。。
Inetコントロールでは、「ちょっと勉強」と思って触れたぐらいで、内部構造は予想したこともありません。
内部はwininet.dllを参照したAPI郡だと思うのですが、それを追っていったらわかると思います。
ぼくは(4ヶ月経ってまだ作りかけの)FTPソフトはWSock32.dllを使用しています。権限などがInetではできない(と思っている)からです。

http://www.mitene.or.jp/~sugisita/family/papa/vb/
コンポーネント→FTPクラス

ここのサンプルを解読するか、あるいはクラスファイルになっているので、そのままプロジェクトに追加をしてしまう方がよいかも?


※追記質問2について
すいません。CDもDIRもできたのですが・・・
何がどううまくいかないのかわかりません。
コードと、症状を教えてくれたらわかるかも?

この回答への補足

ありがとうございます。
昨夜、本を改めて読んでみてわたしの使い方が間違っているのだと思いました。
というのは、OpenURL のサンプルコードを改変して Execute をやっていたので、次のようなコードで試していました。

Private Sub cmdDownload_Click()
  Dim FileName As String

  Inet.URL = "ftp://hostname"
  Inet.UserName = "username"
  Inet.Password = "password"
  Inet.Execute , "GET test.lzh " & filename
  MsgBox "ダウンロード終了"
End Sub

みたいな感じで。ところが本をよく読んでみたら

Private Sub cmdDownload_Click()
  Dim FileName As String

  Inet.URL = "ftp://hostname"
  Inet.UserName = "username"
  Inet.Password = "password"
  Inet.Execute , "GET test.lzh " & filename

  Do While Inet.StillExecuting = True
    DoEvents
  Loop
  MsgBox "ダウンロード終了"
End Sub

のような感じで、同期をとって終了確認をしています。DIR も CD もそうです。わたしはただ単に Execute を発行していただけなのでここが原因だったかな、と午後にまた仕事先で確認したいと思います。

それと、ついでといっては申し訳ないのですがTAGOSAKU7さんはWinSockの方もお詳しそうなので「質問13」の「Socket通信で送信終了のイベントが発生しない」にもお知恵をいただけないでしょうか?図々しくて申し訳ありませんが。

補足日時:2002/03/08 11:20
    • good
    • 0

>サーバはUnix形OS(Soralis)なのです。



それなら、ユーザー名とパスワードを入れる必要があるのでは?

"ftp://user:pwd@172.20.1.17/home/tmp/test.txt"

で動きませんか?
しかし、この方法はセキリティ上問題があるのでお勧め出来ない。

INETコントロールでユーザー名とパスワードを指定するのは
どうするのでしょうか? >TAGOSAKUさん

この回答への補足

ありがとうございます。
早速試してみます。
仕事先のことなので結果のご報告は夕方になりますが。

補足日時:2002/03/06 13:47
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
当所の目的(アップロードとダウンロード)の半分はクリアーできました。
問題点をNo5.のTAGOSAKUさんの方へ書きました。
よろしくご指導をお願いいたします。

お礼日時:2002/03/06 18:59

OpenURLでの取得


これは、ブラウザと同じように
[ファイルにアクセス]して[保存]
という処理です。

どうやらファイル転送とは違い、擬似的な転送と言えます。
なので送信ができません。


FTP接続でのファイル転送は、OpenURLを使用しないで、コマンドで行います。



http://www.microsoft.com/JAPAN/developer/library …

http://www.microsoft.com/JAPAN/developer/library …

に解説とサンプルが出ています。
    • good
    • 0

参考URLと比べてみてもソースに問題はないと思います。



txtURL.text = "ftp://ftp.microsoft.com/developr/drg/Win32/Autor …

としたら動きませんか?

参考URL:http://www.microsoft.com/JAPAN/developer/library …

この回答への補足

ありがとうございます。
サーバはUnix形OS(Soralis)なのです。
ネットワークが繋がっていて、ホスト名(もしくはIPアドレス)が分かっていればFTPポート(21)を使って、FTP送受信できると思っているのですが違うのでしょうか?

補足日時:2002/03/06 12:17
    • good
    • 0

今は時間がないのでサンプルを書けないのですが・・・



コードを見るとコマンドボタンのイベントのソースであるように見えますが、ちょっと書くところが違うような気がします。

バッファは何分割かで受信が行われと思ったのですが・・・
Inetの名前を忘れたけどイベント内に
GetBuf() = Inet.OpenURL(txtURL.Text, icByteArray)
を書くように思ったんだけど、違ったらすいません。


それと・・・質問とは無関係の余談ですが・・・
cmdDownload_Click
と書いてあるのを見て、コマンドボタンのクリックイベントだと、すぐわかりました。
コーディング規則に沿ったネーミングをされてると、大変質問も理解しやすいですね。

この回答への補足

ありがとうございます。
返事をいただけて嬉しいです。
お時間のあるときにサンプルもいただけるとなお嬉しいです。
今日も色々と試しているのですがうまくいきません。
何らかのエラーが生じていると思うのですが、
On Error GoTo でも検出されず手がかりがなくて困っています。
どうぞよろしくお願いいたします。

補足日時:2002/03/05 22:03
    • good
    • 0

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

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

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

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

QMr. Sato will now be in charge of sales. のnow

Mr. Sato will now be in charge of sales.
サトウさんはこれから販売を担当することになる。

という例文がありました。

ここに now が入るのが少し気になっています。

Mr. Sato will be in charge of sales.
だと、この先いつからの事なのか分からないのでnow が入っているのだと思いますが、
Mr. Sato will be in charge of sales from now. でも同じでしょうか?

元の文のように、will と be の間に入る場合、前置詞は不要でしょうか?

細かい疑問で恐縮ですが、宜しくお願いします。

Aベストアンサー

「now」だけで「今から」という意味にもなります。特に「will」などの未来の表現があるときはそうではないでしょうか。
「Mr. Sato will now be in charge of sales.」において前置詞が不要なのは、「now」が副詞として機能しているからです。

「Mr. Sato will be in charge of sales from now.」では「now」という名詞に、起点を表す前置詞「from」がついて「今から」という意味になっています。

一つ付け加えると、「from now」より「from now on」の方が好ましいですね。

Q[VB6.0] Inet OpenURLのエラー検出

VB6.0

InetコントロールでOpenURLを実行した時、404(File Not Found)等のエラーを検出する方法はありますか?

Aベストアンサー

すみません、ResponseCode や ResponseInfo はクライアント側のエラーでした。
GetHeaderでHTTPレスポンスのヘッダを取得できます。
HTTPヘッダの1行目がHTTPステータスなので、「HTTP/1.0 404 Not Found」などが入ります。

以下を試してみてください。

-----------------------------------
Private Sub Command1_Click()

  Dim strURL As String

  '存在しないアドレス
  strURL = "http://www.msn.co.jp/hadfhg.htm"

  Inet1.OpenURL strURL
  Debug.Print Inet1.GetHeader

End Sub
-----------------------------------
※存在しないURL「http://www.msn.com/hadfhg.htm」は、msn.comサーバーの仕様なのか、なぜかバイナリデータを返してくるようです。
バイナリを受け取るようにすれば良いと思いますが、上記ではとりあえずmsn.co.jpにしてあります。

すみません、ResponseCode や ResponseInfo はクライアント側のエラーでした。
GetHeaderでHTTPレスポンスのヘッダを取得できます。
HTTPヘッダの1行目がHTTPステータスなので、「HTTP/1.0 404 Not Found」などが入ります。

以下を試してみてください。

-----------------------------------
Private Sub Command1_Click()

  Dim strURL As String

  '存在しないアドレス
  strURL = "http://www.msn.co.jp/hadfhg.htm"

  Inet1.OpenURL strURL
  Debug.Print Inet1.GetHeader

E...続きを読む

Qdue to limitations in amount of charges - 退任の理由

こんにちは。和訳のアドバイスをお願いいたします。

ある会社のニュースレターの中で、意味が分からないところがあります。

<タイトル>
Resignation of two auditors due to limitations in amount of charges

<本文>
Company A announces the resignation of two auditors, Mr. B and Mr. C, as they exceed the limits in such charges established by the issuing regulations.

2人の監査役が退任した理由は何なのでしょうか?
chargesは責務という意味でしょうか?'the issuing regulations'が何を指しているのかもよく分かりません。ちなみに、このニュースレターは上記の文章から始まっており、それに続く文章の中にも手がかりらしきものが見当たりません。

Aベストアンサー

原文を拝見しましたところ、会社側もはぐらかして書いているような印象を受けます。つまり二名の辞任は名誉なことでなく、むしろ何かをやらかして「解雇」されたのだろうと察します。

ご存知の通り、charge とは「告発、訴状」という意味があります。でも、その場合は amount ではなく number of charges と言うような気がするのです。

ふと思ったのですが、charge とは会社がこれら二名に付与していたクレジットカードのこと、amount は課金額のことだと考えると、少なくとも文章のツジツマが合いませんか? 会社が決めていたリミットを越えて直接業務とは関連性がない課金が何回もあり、社内調査の結果、明らかに違法・不正と見なされるものだったとしたら、引責で辞任に追い込まれることもあるでしょう。二人となると共犯なのでしょうか、要するに「使い込み・横領による解雇」ということです。

文章だけを元にした全く想像ですので、ご参考までに。是非ご質問者に究明して頂きたいです。

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます

Q次の文のin charge ofは誤文?

「娘たちは侍女たちに預けて逃がしてくだされ。」

の英訳を見ると、

「Let my daughters escape in charge of attendants.」

とありました。

しかし、辞書を確認すると、

http://irleigo.blog105.fc2.com/blog-entry-314.html

で書かれてあるように、

『「of 以下の人に任せる」と言う意味で使う場合は

charge の前に the を置く』

とありました。

最初に示した英訳文は誤文でしょうか?

Aベストアンサー

ジーニアス英和辞典にもおっしゃるような記述がありますが,
研究社の英和大辞典では
in (the) charge of ~「~に預けられて,保護されて」
a patient in (the) charge of a nurse「看護師に委ねられている患者」
とあります。

ランダムハウス英和大辞典にも
アメリカ英語として
in charge of 人で「人の支配・管理・責任下に,世話になって」
とあります。

of 自体,主格関係・目的格関係いずれもありますので,
どちらにもとれる余地はあると思います。
the の有無でいくらでもこじつけはできると思いますが,
in search of ~とか,慣用的に the はとれるものです。

let, escape などの語で,監督者,被監督者が明確というのもあるでしょう。

また,he のような代名詞で「彼の監督下で」なら in the charge of him とするより,
in his charge とする方が普通です。

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

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

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む

QIn practical life this mode of thin

In practical life this mode of thinking will have the same effect upon the personal mind as that which is secured in a wire that is not charged when it touches a wire that is charged.


以下の文章があります。(古い精神哲学書の一節です。)この文章が意図することをご教示いただけないでしょうか?

In practical life this mode of thinking will have the same effect upon the personal mind as that which is secured in a wire that is not charged when it touches a wire that is charged.


ご参考までに前の文の後には、以下の文章が続きます。
Thegreat within is a live wire; when the mind touches the great within, it becomes charged more and more with those same immense powers;~

In practical life this mode of thinking will have the same effect upon the personal mind as that which is secured in a wire that is not charged when it touches a wire that is charged.


以下の文章があります。(古い精神哲学書の一節です。)この文章が意図することをご教示いただけないでしょうか?

In practical life this mode of thinking will have the same effect upon the personal mind as that which is secured in a wire that is not charged when it touches a wire that is charged....続きを読む

Aベストアンサー

電気関係のことが分からないのでちょっとずれた回答になる可能性大ですが、一応こんな感じではないかと思いました。
「実際の生活においてこの思考モードは、ちょうど帯電していないワイヤーが帯電しているワイヤーに触れたとき内部に獲得されるのと同じような効果を、個人の心に与える」

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

Qpreferral of charges の訳は?

裁判規定の誓約関する文章に出てくる
preferral of charges の訳を教えてください。

Aベストアンサー

私は法律は専門外です。検索すると出て来ます。
http://www.tpub.com/content/administration/14135/css/14135_201.htm
http://www.justia.com/dictionary/preferral-of-charges.html
に詳しい解説があります。原告側が被告の罪の重さを指定提案する法手続きです。

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む


人気Q&Aランキング

おすすめ情報