サーバー上にあるテキストファイルを
FTPで取得したいのですが
VBであればInetを使用して↓のように取得が可能
だったのですがVB.NETでのInetの使用方法がわかりません
どなたかご存知の方がいらしたらご教授願えますか?
また、別の方法がありましたらアドバイスをお願いします。
宜しくお願いいたします。

====================
Dim FileName As String

Inet.URL = "ftp://hostname/home/temp/"
Inet.UserName = "username"
Inet.Password = "password"
Inet.Execute(, "GET test.txt " & FileName)

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

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

A 回答 (1件)

VBとかプログラミングとか全く知識がないのですが、


興味があったので、調べてみました。
所要時間5分・・・。ってことは、
回答がてんで検討はずれなものになるかも
しれません、そのときはご容赦を・・・

System.Net にWebRequestクラスっていうのが
あるらしいです。なんじゃらほい?って感じなのですが、
きっと、riu-riuさんならバッチリわかるかと思います。

http://www.microsoft.com/japan/msdn/library/defa …

FTPも処理できるって書いてあるので、
まちがいないような・・きがいてるのですが・・
http://www.microsoft.com/japan/msdn/library/defa …

これって、サンプルですかね?
http://www.microsoft.com/japan/msdn/library/defa …
    • good
    • 0
この回答へのお礼

お返事おくれてすみません。
私も探してみたのですが探し方が悪かったのか
見つかりませんでした。
助かりました。
早速、試してみたいと思います。
ありがとうございます。

お礼日時:2003/07/14 09:22

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

QVB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?

VB6.0で、例:StrConv(Text, vbFromUnicode)とかで使用する、
「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する)
は、VB.NETでは使用できないようです。(相当する定数はない?)

「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
どうすれば良いでしょうか?

Aベストアンサー

思いっきり、例文に「COM1」と書いてますが、USBに書き換えてくださいね^^;

それとふと思ったのですが
udtReaderWriterModeWithoutEncryption
変数は構造体ですよね?

メンバが
lngPortName
lngBardRate
というのは、型宣言をINTEGERに変換してますよね?

ちょっとばかり不安に思ったので、追記しておきました。

参考URL:http://okweb.jp/kotaeru.php3?q=1257613

QFTP対応のアプリケーション

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の記述ができないとダメなのですよね?
どうぞ、よろしくお願いいたします。

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
MsgBo...続きを読む

Aベストアンサー

ご指名ありがとうございます。(←変な飲み屋みたい)

こんな感じ?
  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でもないので、ソケットのことを考える必要もないし、手順を間違わなければサーバに設定を施さなくてもできると思います。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

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

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

QVB6.0でFTPでのファイルの送受信

VB6.0でFTPでのファイルの送受信(下記(1))をしようと考えております。
尚、コンポーネントは、インターネットトランスファコントロール(Inet)を使用しております。
(1)"リモートサーバーに対して、複数件のファイルを送信し、無事転送が完了したら(リモートサーバー
の指定フォルダに送信された複数件のファイルがあるのを確認後)、
 クライアント側のファイル(リモートサーバーに送信が済んだファイル)を消す"
という処理を考えております。

ここで、質問なのですが
(1)vbを使ったFTP転送で、複数件のファイルを一括転送(mputコマンドの使用)は、可能か?
 (2)もし、(1)が不可能の場合、
   "送信するファイルをputコマンドで1つ送って、リモート側にそのファイルがあるのを
   getコマンドで確認して、もしgetであれば、クライアント側のそのファイルを消す"
という処理を送信するファイル数分繰り返すことになるんですか?
   
   1つのファイルの場合に、Inet1_State_Changeイベントで、ループさせstate = 12 の時(
リモート側に正常に送信されたと考えて)、クライアント側のファイルを消していいのでしょうか?
   VBのヘルプを見ると、state = 12 は、get処理で使用するというようなことを書いてありますが。
   
以上 

VB6.0でFTPでのファイルの送受信(下記(1))をしようと考えております。
尚、コンポーネントは、インターネットトランスファコントロール(Inet)を使用しております。
(1)"リモートサーバーに対して、複数件のファイルを送信し、無事転送が完了したら(リモートサーバー
の指定フォルダに送信された複数件のファイルがあるのを確認後)、
 クライアント側のファイル(リモートサーバーに送信が済んだファイル)を消す"
という処理を考えております。

ここで、質問なのですが
(1)vbを使ったFTP転送で、...続きを読む

Aベストアンサー

フリーソフトのFFFTPを使用したことがありますか?
あれを見てみてはいかがでしょうか?
ソフトが送っているコマンドが見ることができます。

(1)一括は無理です。1ファイルずつの転送になります。
(2)そのとおりです、消して送信の処理が望ましいですが、消さないでも送信することができたと思います。

ちなみにFTPソフトを作成するのであればWinSockを使用したほうがよいと思います。未検証ですが、権限など更新(755みたいに設定すること)の情報はInetでは無理のような気が・・・
未検証なのでなんとも言えませんが、ぼくもFTPソフトを個人で作成中ですが、WinSockのコマンドを使用しています。

QInetのResponseCodeについて

Inetコントロールでdatファイルを送信するプログラムを作成しています。
SENDした時、エラーだとStateChangedサブルーチンでicError(11)が返ってきます。
そこで、ResponseCodeでサーバの応答を見ているのですが・・・
「12003」と返ってきます。
この数値がさっぱりわかりません。

エラーの原因はサーバにある読み取り専用のファイルと同じファイルを送信するためです。
上書きできないということでエラーが出ていると思います。
この数値についてわかる人はいますか?
説明がわかりにくいかと思いますがよろしくお願いします。

Aベストアンサー

手元のソースによると

' Internet Errors
Public Const INTERNET_ERROR_BASE = 12000

Public Const ERROR_INTERNET_OUT_OF_HANDLES = (INTERNET_ERROR_BASE + 1)
Public Const ERROR_INTERNET_TIMEOUT = (INTERNET_ERROR_BASE + 2)
Public Const ERROR_INTERNET_EXTENDED_ERROR = (INTERNET_ERROR_BASE + 3)


ERROR_INTERNET_EXTENDED_ERRORで検索すると
http://msdn.microsoft.com/library/en-us/wininet/wininet/wininet_errors.asp

ERROR_INTERNET_EXTENDED_ERROR
An extended error was returned from the server. This is typically a string or buffer containing a verbose error message. Call InternetGetLastResponseInfo to retrieve the error text.

InternetGetLastResponseInfoを呼べば、"xxxに書き込めません。"と言ったメッセージを得るのでは?

手元のソースによると

' Internet Errors
Public Const INTERNET_ERROR_BASE = 12000

Public Const ERROR_INTERNET_OUT_OF_HANDLES = (INTERNET_ERROR_BASE + 1)
Public Const ERROR_INTERNET_TIMEOUT = (INTERNET_ERROR_BASE + 2)
Public Const ERROR_INTERNET_EXTENDED_ERROR = (INTERNET_ERROR_BASE + 3)


ERROR_INTERNET_EXTENDED_ERRORで検索すると
http://msdn.microsoft.com/library/en-us/wininet/wininet/wininet_errors.asp

ERROR_INTERNET_EXTENDED_ERROR
An extended error was re...続きを読む

QInetでHTTPのPOST設定方法

Inetコントロールで、HTTPサーバにPOSTを使用しデータを送信しようと考えているのですが、
いろいろ調べたところ、できるようになりました。

ソースは以下の通りです。
Inet1.Execute "アドレス"
_, "POST"
_, "msg=あああ"
_, "Content-Type: application/x-www-form-urlencoded"

上記のソースでサーバ側でmsgと指定し「あああ」という値を
取得することができました。

しかし、POSTで複数のデータを送ることができません。
例えば値をnameとmsgの二つを送る場合、
"msg=あああ"の部分にどのように記述すればよいのでしょうか?
それとも根本的に何か違うのでしょうか?

よろしくお願いします。

Aベストアンサー

Content-TypeとしてURL encoded www formを指定しているのだから、その型式でデータを渡してやるとよいです。
こんな感じ:

"msg=aaa&data=0124&command=go"

QFTPを使わないファイルアップロード

「とほほのWWW入門」にある、wwwupl2 を使ってブラウザからWWWサーバへ
ファイルをアップロードしています。
http://tohoho.wakusei.ne.jp/how2/tec1.htm#upload

VB からこの CGI へ命令(?)を渡し、ユーザには VB の画面だけを表示させておいて、
裏で CGI によるファイルのアップロードをさせることはできるのでしょうか?
つまり、ファイルを指定して送信ボタンを押すという動作を自動化+非表示にさせたいのです。

FTP を使えば解決するのですが、FTPアカウントは 1つしか無い為、
VB 中にアカウント情報を記述するのが怖いのです。
開発環境はVB6、サーバはレンタルサーバです。
よろしくお願い致します。

Aベストアンサー

ブラウザを使用したアップロードは、httpのputです。

なのでVBで実現可能です。

QSystem.IO.Directory.GetFilesの順番

For Each strFileName As String In Directory.GetFiles("フォルダ名","*.TXT")
'なにか処理
Next strFileName


としてファイル名を読み込んで処理する場合、ファイル名でソートされて順番に出てくるような気がします。
どのような基準でソートされるのかを調べているのですが、はっきり明記されているものが見つかりません。

安心して使うために裏付けがほしいのですが、どこかに詳細な資料はないでしょうか?
よろしくお願いします。

Aベストアンサー

内部的に FindFirstFile / FindNextFile を使っているようだけど
http://www.microsoft.com/japan/msdn/net/general/win32map.asp

取得する順番は..
http://forums.belution.com/ja/vc/000/038/23.shtml

なるほど!

正式情報は
http://msdn.microsoft.com/library/en-us/fileio/fs/findnextfile.asp

The order in which this function returns the file names is dependent on the file system type. With the NTFS file system and CDFS file systems, the names are returned in alphabetical order. With FAT file systems, the names are returned in the order the files were written to the disk, which may or may not be in alphabetical order.

内部的に FindFirstFile / FindNextFile を使っているようだけど
http://www.microsoft.com/japan/msdn/net/general/win32map.asp

取得する順番は..
http://forums.belution.com/ja/vc/000/038/23.shtml

なるほど!

正式情報は
http://msdn.microsoft.com/library/en-us/fileio/fs/findnextfile.asp

The order in which this function returns the file names is dependent on the file system type. With the NTFS file system and CDFS file systems, the names are returned in alphabetical or...続きを読む

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...続きを読む

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む


人気Q&Aランキング