アップロードできないファイルをネット上にアップロードする方法

このQ&Aのポイント
  • WindowsXP ProSP1、VB6.0SP6のPC環境で、ローカルHDDにあるファイルをネット上にアップロードしたい場合、どのようにすればよいでしょうか?
  • コードを作成してアップロードを試みましたが、うまくコピーできませんでした。解決策を教えてください。
  • ネット上にファイルをアップロードする方法をご存知の方、ご教示ください。
回答を見る
  • ベストアンサー

アップロードができない

ローカルHDDにあるファイルをネット上にアップロードしたいため下記コードを作成したのですがコピーする事ができませんでした。 PC環境:WindowsXP ProSP1、VB6.0SP6です。 どうすればアップーロードできるのでしょうか? どなたか御願い致します。 ///////////////////////////////////////////////////// Private InetState As Boolean Private InetError As String Private Sub Command1_Click() Inet.RequestTimeout = 2 Inet.UserName = "*" Inet.Password = "***" Inet.Execute "*", "PUT c:\11.txt 11.txt" Do DoEvents Loop Until InetState If InetError <> "" Then MsgBox InetError InetState = False Inet.Execute "*", "CLOSE" Do DoEvents Loop Until InetState InetState = False Inet.Execute "*", "QUIT" Do DoEvents Loop Until InetState Inet.Cancel Unload Me End Sub ///////////////////////////////////////////////

  • a50
  • お礼率31% (55/176)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

たぶんここを見たのかな? http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t10.htm この方法はExecuteした後、ステータスの変化をその都度取得する非同期アップロードの方法ですね。 参考URLのは、取得も兼ねて書いてあるようなので、チコッとばかり変更して張っておきます。 Option Explicit Private InetState As Boolean Private InetError As String Private InetData As String Private Sub Command1_Click()   Call PutFile( _     "ftp://お台場.混む", _     "菊○", _     "職場復活の呪文", _     "c:\11.txt", _     "/public_html/11.txt" _   ) End Sub Private Function PutFile( _     ByVal p_strURL As String, _     ByVal p_strUID As String, _     ByVal p_strPWD As String, _     ByVal p_strFILE_Local As String, _     ByVal p_strFILE_Server As String, _     Optional ByVal p_intTimeOut As Integer = 2 _ ) As Boolean On Error GoTo PGMERR   '接続   Inet.URL = p_strURL   Inet.RequestTimeout = p_intTimeOut   Inet.UserName = p_strUID   Inet.Password = p_strPWD   Inet.Protocol = icFTP      'アップロード開始   Inet.Execute , "PUT " & p_strFILE_Local & " " & p_strFILE_Server      'ステータスの状態が変わるまで待機   Do    DoEvents   Loop Until InetState       If InetError <> "" Then     MsgBox InetError   End If      '接続を閉じる処理   Inet.Execute , "CLOSE"   Do    DoEvents   Loop Until InetState   '接続終了処理   Inet.Execute , "QUIT"   Do     DoEvents   Loop Until InetState       PutFile = True    PGMEND:   Exit Function PGMERR:   Call MsgBox("エラー番号:" & Err.Number & vbCrLf & vbCrLf & Err.Description, vbCritical)   GoTo PGMEND End Function Private Sub Inet_StateChanged(ByVal State As Integer)  Dim w As String  Select Case State   Case icError    InetError = Inet.ResponseCode & " - " & Inet.ResponseInfo    InetState = True   Case icResponseCompleted    Do     w = Inet.GetChunk(1024, icString)     DoEvents     If Len(w) = 0 Then      InetError = ""      InetState = True     Else      InetData = InetData & w      InetState = False     End If    Loop Until InetState   End Select End Sub

a50
質問者

お礼

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

a50
質問者

補足

早速試してた所アップロードされました。有難うございます。 Inet.Execute , "PUT " & p_strFILE_Local & " " & p_strFILE_Server を変えただけで、なぜアップロードできたのか理解できません。 Inet.Execute "ftp://お台場.混む", "PUT c:\11.txt /public_html/11.txt" でも一緒だと思うのですが・・・

その他の回答 (1)

回答No.1

http://www.mitene.or.jp/~sugisita/vb6_net.html WININET FTPクライアント (WININET使用) を参考にしてはいかがですか?

a50
質問者

補足

internetTransferコントロールを使用してアップロードできないかのかと探しています。

関連するQ&A

  • VB6.0でFTP接続するとき、UserNameに@が含まれる場合(訂正版)

    VB6.0で、下のようなプログラムを組んでいるのですが、 UserNameに"@"が含まれる場合、 Execute時にはInet1に'@'が2つ入る事になり、 FTP接続ができません。 このような場合、どのように対処すれば良いのでしょうか? Private Sub FtpUpload()   With Inet1     .URL = "ftp://" & strFtpAddress & "/"   ' URL     .UserName = strUserId                   ' ユーザー名     .Password = strPass                     ' パスワード     ' サーバーにファイルを送信     .Execute , "PUT " & _                strUploadFileName & " " & _                "wwwroot/" & strUploadFileName     Do While .StillExecuting = True       DoEvents      Loop   End With End Sub ※半角スペースは、全角スペースに置換しています。

  • VB.NETでサーバーからFILEを取得する

    サーバー上にあるテキストファイルを 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("ダウンロード終了") ====================

  • inetコントロールを使用したFTP送信の質問その1

    ローカルにあるファイルを、FTPサーバに送信するプログラムを作成しました。 inetコントロールを使用して、以下のようなプログラムを組みました。 Private sub ftp()  Inet1.Protocol=icFTP  Inet1.Url="ftp://xxx.xxx.xxx.xxx/"  Inet1.UserName="aaaa"  Inet1.Password="bbbb"  Inet1.Execute , "SEND x:\xxx\xxx.txt xxx/xxx.txt" End sub Private sub Inet1_StateChanged(Byval State As Integer) Dim sMsg As String  Select Case State   Case icRequestSent    sMsg = "送信完了"    TCall LogWrite(sMsg) ログをファイルに書く(自作関数)   Case icError    sMsg = Inet1.ResponseCode & " " & Inet1.ResponseInfo    Call LogWrite(sMsg) エラーログをファイルに書く(自作関数)  End Select End Sub ファイルを複数送信するため、「sub ftp()」は複数回呼び出されます。 上記プログラムにCLOSEコマンドとCANCELメソッドを追加して、以下のようにしたほうがよいのでしょうか? CLOSEコマンドとCANCELメソッドの使い方がよくわからず、悩んでいます。 Private sub ftp()  Inet1.Protocol=icFTP  Inet1.Url="ftp://xxx.xxx.xxx.xxx/"  Inet1.UserName="aaaa"  Inet1.Password="bbbb"  Inet1.Execute , "SEND x:\xxx\xxx.txt xxx/xxx.txt"  Inet1.Execute , "CLOSE" End sub Private sub Inet1_StateChanged(Byval State As Integer) Dim sMsg As String  Select Case State   Case icRequestSent    sMsg = "送信完了"    TCall LogWrite(sMsg) ログをファイルに書く(自作関数)   Case icError    sMsg = Inet1.ResponseCode & " " & Inet1.ResponseInfo    Call ErrLogWrite(sMsg) エラーログをファイルに書く(自作関数)    Inet1.Cancel  End Select End Sub

  • 画像をブランクつきでランダムに表示する方法が分かりません。

    VB6.0を使用してプログラミングを作成しているのですが、初心者のため行き詰っています。 前回も質問させていただいたのですが、ブランク(ピクチャーボックスの非表示)が間に入ることを想定していなかったため、改めて質問させていただきます。 作成したいプログラミングの内容は、8枚の写真を2秒間ずつ、1.5秒間のブランクを挿んで、ランダムに一枚ずつピクチャーボックスに表示するというものです。 RandomizeはByte型を使用したいのですが、コードがよくわかりません。 以下は、今までに出来上がっているコードです。 Private Declare Function timeGetTime Lib "winmm.dll" () As Long Private Sub Command1_Click() Command1.Visible = False PresentStimulus0 End Sub Private Sub PresentStimulus()  Picture1.Visible = True  Picture1.Picture = LoadPicture("C:\AAA.jpg")  nowtime = timeGetTime() 'milliseconds from windows startup  Do  DoEvents  Loop Until timeGetTime() - nowtime > 2000  Picture1.Visible = False  Do  DoEvents  Loop Until timeGetTime() - nowtime > 1500 End Sub C:\AAA.jpgの部分にランダムに8枚の画像を呼び出し、PresentStimulusを8回繰り返したいのですが・・・。 よろしくお願いいたします。

  • シリアル通信:オフライン時にうまく終了してくれません

    シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。

  • VBAを使ったストップウォッチを時/分/秒で・・・

    エクセルでVBAを使って、ストップウォッチの様な形で時間を表示しながら計測したおのですが、以下のマクロだと少数点が表示されており、且つ、60秒に達したときに分に切り替わらない為、分に換算しなければなりません。 Private blnStop As Boolean Private blnStart As Boolean Sub StopWatch()   Dim dblTimer As Double   If blnStart = True Then     blnStop = True     Exit Sub   End If   blnStart = True   blnStop = False   dblTimer = Timer   Do Until blnStop = True     Cells(1, 1) = Int((Timer - dblTimer) * 100) / 100     DoEvents   Loop   blnStart = False   blnStop = False End Sub この様に、常に時間を特定のセルに表示させながら計測する様な形にしたいのですが、どうすれば「1時間20分50秒」の様な表示にできるでしょうか。 どなたかよろしくお願いいたします。

  • フリーズしてしまいます。

    アクセスでWebBrowserコントロールを使ってIE操作をしているのですが フリーズしてしまいます。 フォームに、WebBrowser0を配置して、 ---------------------------------- Private Sub Form_Load() Me.WebBrowser0.Navigate "http://login.yahoo.co.jp/config/login?logout=1" Call wait 省略・・・ End Sub ---------------------------------- Sub wait() Const READYSTATE_COMPLETE As Long = 4 Do Until Me.WebBrowser0.ReadyState = READYSTATE_COMPLETE Loop Do While Me.WebBrowser0.Busy = True DoEvents Loop End Sub ---------------------------------- を実行すると必ずフリーズします。 ---------------------------------- Sub wait() Do While Me.WebBrowser0.Busy = True DoEvents Loop End Sub ---------------------------------- にしたら問題なく表示されます。 でもこれだけだと、表示し終わりません。 表示されてないのに次のコードへ進んでしまいます。 そもそもなぜフリーズするのでしょうか? アクセス2007です。ご回答よろしくお願いします。

  • 終了してもプログラムが実行したまま(VB)

    非常に時間のかかる繰り返し処理を行なうプログラムを作りました。どのくらい、プログラムが進行しているのかわかりやすくするため、 Progress.Show でProgressという名前のフォームを表示し、そこに、プログラムが何%終わったのか表示するようにしました。 プログラムはDo Loop文が使ってあるので、何%終わったのかを表示するためにLoopした回数を取得して、それをフォームに表示することにしましたが、どこかで調べたら機械は、Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました。 そこまではうまくいきました。プログラムを実行すると、プログラムが実行されて何%終わったかもちゃんと表示できるようになりました。 ところが、プログラムの実行中にフォームの右上の×ボタンを押したところ、フォームは画面から消え、プログラムが終了したように見えるのに、VB Editorでは[実行中]となっており、終わってくれません。ずっとDo Loopが実行されたままです。 Private Sub Form_Terminate() のところに Unload Progress と書いても、「Unloadメソッドは使えません」などというエラー・メッセージが出ます。(フォーム上にボタンを置き、そこをクリックするとUnloadするようにしてみましたがやはり同じことを言われました。) 原因は何でしょうか? フォームをUnloadする、ということの意味をちゃんと理解していないのでいけないのだと思うのですが、調べてもよく言っていることがわかりません。 よろしくお願いします。

  • 無限ループ VBA IE操作

    VBAです。 とあるサイトで Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub が無限ループに陥ります。 中断して Exit Sub を入れてみましたが、抜けれません。 ページは既に表示済みです。 なぜ無限ループが抜けられないのか、 なぜページが表示されているのにこのコードが繰り返されるのか 何かわかる方よろしくお願いします。

  • 表示されるまで待たせたい

    vbaでieの操作をしているのですが Sub マクロ1() Do While ObjIE.Busy = True DoEvents Loop End Sub でも Sub マクロ2() Const READYSTATE_COMPLETE As Long = 4 Do Until ObjIE.ReadyState = READYSTATE_COMPLETE Loop End Sub でも、 表示される前に次のコードへ進んでしまって エラーになってしまいます。 表示されるまで待たせるには Application.Wait (Now + TimeValue("00:00:03")) を付け足すしかないのでしょうか? (できればこれは使いたくないです) ご教授よろしくお願い致します。

専門家に質問してみよう