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
MSDNで『Inetコントロール』→『メソッド』→『Executeメソッド』
→『Dir』を調べてみて、わからなかったら再度質問してください。
dirというのは
一覧の取得ですよね。
例えば1.txt、2.txt、3.txtとあったばあいdirをすると
1.txt XXXXXXXX
2.txt XXXXXXXX
3.txt XXXXXXXX
と表示されますよね。
でも、その値を一個ずつ取得して、get test1.txt (保存先フォルダ)
という風に、ファイルを一個ずつ変数にいれるにはどうしたらいいのでしょう?
MSDNで『Inetコントロール』→『メソッド』→『Executeメソッド』の
『使用例』を見て下さい。
Executeメソッドを使った場合はWhileのLoopを使うよりInet1_StateChangedを
使った方がいいですね。
Dirコマンドで複数のファイルの名前がGet出来たら、一つずつ
再びExcuteメソドで『Get』すればいいと思いますが。
色々ありがとうございます。
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 "
とやってみたんですが、うまくはいってません。。。
書き方はこれでいいのでしょうか???
※横から失礼
> として,dirコマンド実行するようにいれましたが、
> この値って言うのはどこに格納すればいいのでしょう??
> あらかじめtextボックスをつくってみて
> .Execute txt_XXX.Text, "dir "
> とやってみたんですが、うまくはいってません。。。
> 書き方はこれでいいのでしょうか???
ノ<こういう、メソッドの機能や挙動などは人に訊くより自分で調べた方がいいと思いますが(orz
ねろさんが示された、MSDNでInet コントロールについてはもう見ましたか?
…ところで、同じ動きを書いた似たコードを他のサイトでも見たような…うーん、面妖な…
恐れ入ります。
.Execute , "dir"
Do While .StillExecuting
DoEvents
Loop
vtData = .GetChunk(1024, icString)
とりあえずはこれで、一覧の文字列取得はできました。
この中から、特定のファイルを抜き出す処理は、関数かなにか
作成して、
みつかったら、そのつどget処理をしていくようにすればいいのでしょうか?
しかし、この文字列から例えば、.xlsだけというのは
どうやって探せばよいのでしょう??
ファイルによって文字列の長さもちがいますよね。。
もう少し、お力を下さい。(涙)
ここに解決のアイテムを置いときますね
「過去ログ検索」「Inet」
検索すると、ねろさんの解説とかもありますよ
>ファイルによって文字列の長さもちがいますよね。。
ここら辺はあなたのアイデア次第ですね
たとえばこの様に分割してみるとか?
Dim strData() As String
strData = Split(vtData, vbNewLine)
簡単に言うと努力の成果が見られません
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つ目の処理と変わっていないので原因がわかりません。
度々申し訳ありませんでした。
はいっていた文字列に改行が含まれてたため
2つ目以降取得に失敗していました。
改行をはずして1列として考えたらうまくいきました。
今度からはもう少し、現象を見極めてそれにあうように質問したいと思います。
わかりにくい質問でもうしわけありませんでした。。。m(__)m
一回解決にしたんですが、
また質問があり、これに追加しました。これでいいのですが
ファイルの保存場所が変わった為
.execute ,"dir"
を
.execute ,"cd /TEST/FILE"
.execute ,"dir"
としたら
「最後の要求が実行中です。」
とエラーになりおわりません。。。
.Execute , "get " & vtData2 & " D:\TEST\" & vtData2 & ""
ちなみにここの部分も一応書き換えています。
ディレクトリの位置を変えただけなんですが、回避方法がわかりません。。。
ツイート | ![]() |