FTPサーバからのファイル名の取得

解決


ペンネーム  2005-04-12 19:16:07  No: 120815

VB6.0 SP6
今FTPに接続していて、ファイルをgetしたいんですけど
Inetを使用していて、mgetが使えないようなので、
lsかなんかつかって一つずつファイル名を取得していきたいんですけど
やり方がわかりません。。。。どうやったらいいのでしょう?

    With Inet
         .URL = "ftp://" & ServerIP & "/"
         .UserName = "" & FTPUser & ""
         .Password = "" & FTPPass & ""
         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          Do While .StillExecuting = True
             DoEvents
          Loop
         .Execute , "bye"
     End With

おそらく、XXXの部分にファイルを読み込む変数等でぐるぐる回しながら
get コマンドしていけばいいんだと思うんですが、
書き方がわかりません。。。

どうか、教えてくださいm(__)m


ねろ  2005-04-13 00:28:43  No: 120816

MSDNで『Inetコントロール』→『メソッド』→『Executeメソッド』
→『Dir』を調べてみて、わからなかったら再度質問してください。


ペンネーム  2005-04-13 00:41:49  No: 120817

dirというのは
一覧の取得ですよね。
例えば1.txt、2.txt、3.txtとあったばあいdirをすると
1.txt XXXXXXXX
2.txt XXXXXXXX
3.txt XXXXXXXX
と表示されますよね。
でも、その値を一個ずつ取得して、get test1.txt (保存先フォルダ)
という風に、ファイルを一個ずつ変数にいれるにはどうしたらいいのでしょう?


ねろ  2005-04-13 02:23:18  No: 120818

MSDNで『Inetコントロール』→『メソッド』→『Executeメソッド』の
『使用例』を見て下さい。
Executeメソッドを使った場合はWhileのLoopを使うよりInet1_StateChangedを
使った方がいいですね。
Dirコマンドで複数のファイルの名前がGet出来たら、一つずつ
再びExcuteメソドで『Get』すればいいと思いますが。


ペンネーム  2005-04-13 06:45:10  No: 120819

色々ありがとうございます。

    With Inet
         .URL = "ftp://" & ServerIP & "/"
         .UserName = "" & FTPUser & ""
         .Password = "" & FTPPass & ""
         .Execute,"dir"
          Do While .StillExecuting = True
             DoEvents
          Loop
         .Execute , "bye"
     End With

として,dirコマンド実行するようにいれましたが、
この値って言うのはどこに格納すればいいのでしょう??
あらかじめtextボックスをつくってみて
.Execute txt_XXX.Text, "dir "
とやってみたんですが、うまくはいってません。。。
書き方はこれでいいのでしょうか???


ガッ  2005-04-13 07:03:32  No: 120820

※横から失礼
> として,dirコマンド実行するようにいれましたが、
> この値って言うのはどこに格納すればいいのでしょう??
> あらかじめtextボックスをつくってみて
> .Execute txt_XXX.Text, "dir "
> とやってみたんですが、うまくはいってません。。。
> 書き方はこれでいいのでしょうか???
ノ<こういう、メソッドの機能や挙動などは人に訊くより自分で調べた方がいいと思いますが(orz
ねろさんが示された、MSDNでInet コントロールについてはもう見ましたか?
…ところで、同じ動きを書いた似たコードを他のサイトでも見たような…うーん、面妖な…


ペンネーム  2005-04-13 18:03:32  No: 120821

恐れ入ります。
.Execute , "dir"
Do While .StillExecuting
DoEvents
Loop
vtData = .GetChunk(1024, icString)

とりあえずはこれで、一覧の文字列取得はできました。
この中から、特定のファイルを抜き出す処理は、関数かなにか
作成して、
みつかったら、そのつどget処理をしていくようにすればいいのでしょうか?
しかし、この文字列から例えば、.xlsだけというのは
どうやって探せばよいのでしょう??
ファイルによって文字列の長さもちがいますよね。。

もう少し、お力を下さい。(涙)


むっきー  2005-04-13 19:07:56  No: 120822

ここに解決のアイテムを置いときますね
「過去ログ検索」「Inet」

検索すると、ねろさんの解説とかもありますよ

>ファイルによって文字列の長さもちがいますよね。。
ここら辺はあなたのアイデア次第ですね
たとえばこの様に分割してみるとか?

Dim strData() As String
strData = Split(vtData, vbNewLine)

簡単に言うと努力の成果が見られません


ペンネーム  2005-04-13 21:15:36  No: 120823

With Inet
         .URL = "ftp://" & ServerIP & "/"
         .UserName = "" & FTPUser & ""
         .Password = "" & FTPPass & ""
         .Execute , "dir"
'         Do While .StillExecuting
'            DoEvents
'         Loop
         vtData = .GetChunk(1024, icString)
         Do
           n = InStr(n + 1, vtData, ".xls")
           If n = 0 Then Exit Do
           vtData2 = Mid(vtData, 1, Len(vtData) - Len((Mid(vtData, n + 3 + 1))))
           .Execute , "get " & vtData2 & " D:\TEST\" & vtData2 & ""
           Do While .StillExecuting = True
            DoEvents
           Loop
           c = Len(vtData2)
           vtData = Mid(vtData, c + 1)
           n = 0
           count1 = count1 + 1
           DoEvents
         Loop
'         Do While .StillExecuting = True
'            DoEvents
'         Loop
         .Execute , "close"
         .Execute , "bye"
     End With

これで、うまく文字列を取得できたのですが
一つ目のファイルはうまくgetできましたが、
2つ目以降getできませんでした。
入っている文字列はファイル名がきちんと格納されています。

流れはそのまま1つ目の処理と変わっていないので原因がわかりません。


ペンネーム  2005-04-13 22:04:08  No: 120824

度々申し訳ありませんでした。
はいっていた文字列に改行が含まれてたため
2つ目以降取得に失敗していました。
改行をはずして1列として考えたらうまくいきました。

今度からはもう少し、現象を見極めてそれにあうように質問したいと思います。
わかりにくい質問でもうしわけありませんでした。。。m(__)m


ペンネーム  2005-04-14 06:44:02  No: 120825

一回解決にしたんですが、
また質問があり、これに追加しました。これでいいのですが
ファイルの保存場所が変わった為
.execute ,"dir"

.execute ,"cd /TEST/FILE"
.execute ,"dir"
としたら
「最後の要求が実行中です。」
とエラーになりおわりません。。。
.Execute , "get " & vtData2 & " D:\TEST\" & vtData2 & ""
ちなみにここの部分も一応書き換えています。

ディレクトリの位置を変えただけなんですが、回避方法がわかりません。。。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加