[リストへもどる]
一括表示

投稿時間:2003/12/11(Thu) 16:44
投稿者名:のっこ
Eメール:
URL :
タイトル:
アップロードについて
サーバーに転送するプログラムを書いていますが
うまく転送できません。

Inet1.URL = "ftp://ftp11.nifty.com" ' FTPアドレスを指定
Inet1.UserName = "myid" ' ユーザ名を指定
Inet1.Password = "mypassward" ' パスワードを指定
Inet1.Protocol = icFTP ' 接続方法を指定

Inet1.Execute , "CD homepage" ' ディレクトリの変更
Do While Inet1.StillExecuting
DoEvents ' 前の処理が終わるまで待機
Loop
' アップロード処理を行う
Inet1.Execute , "PUT C:\WINDOWS\MEDIA\CANYON.MID canyon.mid"

これはサンプルですがディレクトリの変更がうまくできません。

http://www.geocities.co.jp/HeartLand-Renge/9021/2003diary/

上の2003diaryに変更させたいです。

変更のさせ方を教えて下さい。

環境 WINXP VB6

投稿時間:2003/12/11(Thu) 20:04
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: アップロードについて
ディレクトリを移動したいなら、現在地からの相対パスをしていするか、ルートパス
からの絶対パスを指定して見て下さい。(色々試してみれば
解るかと思いますよ)
 HeartLand-Renge/9021/2003diary/

投稿時間:2003/12/11(Thu) 20:11
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re^2: アップロードについて
> ディレクトリを移動したいなら、現在地からの相対パスをしていするか、ルートパス
> からの絶対パスを指定して見て下さい。(色々試してみれば
> 解るかと思いますよ)
>  HeartLand-Renge/9021/2003diary/

色々やってみましたが、もう一度試してみます。

本当に有難う御座いました。

投稿時間:2003/12/11(Thu) 20:43
投稿者名:のっこ
Eメール:
URL :
タイトル:
アップロードされません。

こんな感じなんですが、アップロード先を確認してもアップロードされてません。
何かいい案はありませんか? まったく分かりません。

    Inet1.URL = "ftp://ftp.geocities.co.jp"
    Inet1.UserName = "****"
    Inet1.Password = "****"
    Inet1.Protocol = icFTP    
    Inet1.Execute , "CD HeartLand-Renge/9021/2003diary/"
    Inet1.Execute , "PUT C:\Documents and Settings\既定\デスクトップ\ドラッグ&ドロップ.txt ドラッグ&ドロップ.txt"

投稿時間:2003/12/11(Thu) 21:03
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: アップロードされません。
>     Inet1.Execute , "PUT C:\Documents and Settings\既定\デスクトップ\ドラッグ&ドロップ.txt ドラッグ&ドロップ.txt"

試しに c:\Test.txt にファイルを作成してそれをUPして見て下さい。

Inet1.Execute , "put c:\test.txt test.txt"

投稿時間:2003/12/11(Thu) 21:38
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: アップロードされません。
>     Inet1.Execute , "PUT C:\Documents and Settings\既定\デスクトップ\ドラッグ&ドロップ.txt ドラッグ&ドロップ.txt"

空白が含まれているフォルダを使用しているからだと思います。
それと全角文字を使ったフォルダ名やファイル名はトラブルの元になりますので
使用しない方(インターネット上で)が無難かと思います。(&等も)

投稿時間:2003/12/12(Fri) 09:57
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re^2: アップロードされません。

> 空白が含まれているフォルダを使用しているからだと思います。
> それと全角文字を使ったフォルダ名やファイル名はトラブルの元になりますので
> 使用しない方(インターネット上で)が無難かと思います。(&等も)

Test.txtをCのルートに置いてアップロードすると成功しました。
僕のした事はどのフォルダに置いてもアップロードさせる事です。
ファイルは半角英数字なのは仕方ないとは思いますが・・・。

それとアップロードがされたので実行ストップさせるとフリーズぽくなります。

すみませんがいい案を教えて下さい。

投稿時間:2003/12/12(Fri) 11:26
投稿者名:のっこ
Eメール:
URL :
タイトル:
フリーズぽくなります。

> Test.txtをCのルートに置いてアップロードすると成功しました。
> 僕のしたい事はどのフォルダに置いてもアップロードさせる事です。
空白入りフォルダで成功しました。


> それとアップロードがされたので実行ストップさせるとフリーズぽくなります。
これはどうしても解消されません。

投稿時間:2003/12/12(Fri) 11:28
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: アップロードされません。
> 空白入りフォルダで成功しました。

どのようにされたのでしょうか? 私も試して見たのですが見つかりませんでした。
参考のため教えて下さい。

> > それとアップロードがされたので実行ストップさせるとフリーズぽくなります。
> これはどうしても解消されません。

下記のように転送後待機していますか?

        '転送が終了するまで待機
        Do While .StillExecuting = True
           DoEvents
        Loop

投稿時間:2003/12/12(Fri) 11:55
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re^4: アップロードされません。

> どのようにされたのでしょうか? 私も試して見たのですが見つかりませんでした。
> 参考のため教えて下さい。
Inet1.Execute , "PUT " & Chr$(34) & File & Chr$(34) & " " & File1
>
> 下記のように転送後待機していますか?
>
>         '転送が終了するまで待機
>         Do While .StillExecuting = True
>            DoEvents
>         Loop

させてませんがディレクトリの変更後に

    Do While Inet1.StillExecuting
        DoEvents ' 前の処理が終わるまで待機
    Loop

入れてから転送しています。

これを抜くと勝手に転送します。

投稿時間:2003/12/12(Fri) 12:13
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: アップロードされません。
> Inet1.Execute , "PUT " & Chr$(34) & File & Chr$(34) & " " & File1
ありがとうございます。私が試した時フォルダにファイルを移しておくのを
忘れていて試していたようでした。

> させてませんがディレクトリの変更後に
>
>     Do While Inet1.StillExecuting
>         DoEvents ' 前の処理が終わるまで待機
>     Loop
>
> 入れてから転送しています。
>
> これを抜くと勝手に転送します。
ファイルサイズが小さいと大丈夫だと思いますが、ファイルサイズが大きいと
完全に送ってしまうまでにプロシージャが終了してしまいます。
そのためにフリーズ状態になります。

        .Execute , "put c:\test.txt test.txt"
        '転送が終了するまで待機
        Do While .StillExecuting = True
           DoEvents
        Loop

のように転送後も待機して見て下さい。
もちろん、ディレクトリの変更後にも必要です。

投稿時間:2003/12/12(Fri) 13:52
投稿者名:のっこ
Eメール:
URL :
タイトル:
フリーズになります

>         '転送が終了するまで待機
>         Do While .StillExecuting = True
>            DoEvents
>         Loop
>
> のように転送後も待機して見て下さい。
> もちろん、ディレクトリの変更後にも必要です。

下のコードでもフリーズします。

    Inet1.URL = "ftp://" & TensouS
    Inet1.UserName = TensouA
    Inet1.Password = TensouP
    Form1.Caption = Filen1 & "を転送中"
    
    Inet1.Execute , "CD " & TensouT ' ディレクトリの変更
    
    Do While Inet1.StillExecuting = True
        DoEvents
    Loop
    
    Inet1.Execute , "PUT " & Chr$(34) & Filen & Chr$(34) & " " & Filen1
    
    Do While Inet1.StillExecuting = True
        DoEvents
    Loop

いい方法はありませんか?
これがなければ使えるレベルなのに・・・。

投稿時間:2003/12/12(Fri) 14:00
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: フリーズに・・
ここまでの処理なら問題ないはずですが、これ以外に何か処理していませんか?
プロシージャ内のコードをすべて投稿して見て下さい、こちらでも試してみます。
但し、変にコードを省略せずに事象が再現できるようにして下さい。
勿論、IDやパスワードは***で結構ですが。

投稿時間:2003/12/12(Fri) 14:14
投稿者名:のっこ
Eメール:
URL :
タイトル:
コード掲載
> ここまでの処理なら問題ないはずですが、これ以外に何か処理していませんか?
> プロシージャ内のコードをすべて投稿して見て下さい、こちらでも試してみます。
> 但し、変にコードを省略せずに事象が再現できるようにして下さい。
> 勿論、IDやパスワードは***で結構ですが。

再現できるか分かりませんが載せておきます。
変数で宣言がないのはプロシージャ外で宣言しています。
よろしくお願いします。

Private Sub List1_DblClick()
  On Error Resume Next
  Dim TensouS As String, TensouA As String
  Dim TensouP As String, TensouT As String, Now As Long
    
    TensouS = ReadINI("Tensou", "TensouS")
    TensouA = ReadINI("Tensou", "TensouA")
    TensouP = ReadINI("Tensou", "TensouP")
    TensouT = ReadINI("Tensou", "TensouT")

    
    MsgBox "アップロードします。", 65, "簡単FTP"
    If ret = 2 Then
    Exit Sub
    Else
    List1.ListIndex = 0
    For lngCount = 1 To List1.ListCount
    Inet1.URL = "ftp://" & TensouS
    Inet1.UserName = TensouA
    Inet1.Password = TensouP
    Form1.Caption = Filen1 & "を転送中"
    
    Inet1.Execute , "CD " & TensouT ' ディレクトリの変更
    
    Do While Inet1.StillExecuting = True
        DoEvents
    Loop
    
    Inet1.Execute , "PUT " & Chr$(34) & Filen & Chr$(34) & " " & Filen1
    
    Do While Inet1.StillExecuting = True
        DoEvents
    Loop
        
    fn = FreeFile
    Open App.Path & "\" & "log.txt" For Append As #fn
    Print #fn, Filen1 & "を転送。"
    Close #fn
    List1.ListIndex = lngCount
    Next lngCount
    List1.ListIndex = -1
    Form1.Caption = "転送終了"
        Now = Timer
        While Timer < Now + 1    '1秒間待機する
        DoEvents
        Wend
    Form1.Caption = "簡単FTP Ver.1.30"
    End If
End Sub

投稿時間:2003/12/12(Fri) 15:04
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: コード載せておきます(長くなったのでこちらで)
Filen と Filen1 を外部でうまく取得できているなら、

For lngCount = 1 To List1.ListCount -1

ではどうでしょう。
For lngCount = 1 To List1.ListCount では何もないデータを取得しているかと思います。

Filen と Filen1 は上記のループ内で取得された方がいいかと思います。

投稿時間:2003/12/12(Fri) 16:12
投稿者名:のっこ
Eメール:
URL :
タイトル:
やっぱりフリーズします
下のコードにしましたがフリーズになります。
ループでパスとファイルを取得させました。

>For lngCount = 1 To List1.ListCount では何もないデータを取得しているかと思います。
これでないと転送ができません。何故でしょうか?

For lngCount = 0 To List1.ListCount - 1
結果的に似たようなコードにしないとできません。

Private Sub List1_DblClick()
  On Error Resume Next
  Dim TensouS As String, TensouA As String
  Dim TensouP As String, TensouT As String, Now As Long
    
    TensouS = ReadINI("Tensou", "TensouS")
    TensouA = ReadINI("Tensou", "TensouA")
    TensouP = ReadINI("Tensou", "TensouP")
    TensouT = ReadINI("Tensou", "TensouT")

    
    MsgBox "アップロードします。", 65, "簡単FTP"
    If ret = 2 Then
    Exit Sub
    Else
    List1.ListIndex = 0
    For lngCount = 0 To List1.ListCount - 1
    Inet1.URL = "ftp://" & TensouS
    Inet1.UserName = TensouA
    Inet1.Password = TensouP
    Form1.Caption = Filen1 & "を転送中"
    
    Inet1.Execute , "CD " & TensouT ' ディレクトリの変更
    
    Do While Inet1.StillExecuting = True
        DoEvents
    Loop
    
    Filen = List1.List(List1.ListIndex)
    Filen1 = Right(Filen, Len(Filen) - InStrRev(Filen, "\"))
    
    Inet1.Execute , "PUT " & Chr$(34) & Filen & Chr$(34) & " " & Filen1
    
    Do While Inet1.StillExecuting = True
        DoEvents
    Loop
        
    fn = FreeFile
    Open App.Path & "\" & "log.txt" For Append As #fn
    Print #fn, Filen1 & "を転送。"
    Close #fn
    List1.ListIndex = lngCount
    Next lngCount
    List1.ListIndex = -1
    Form1.Caption = "転送終了"
        Now = Timer
        While Timer < Now + 1    '1秒間待機する
        DoEvents
        Wend
    Form1.Caption = "簡単FTP Ver.1.30"
    End If
End Sub

投稿時間:2003/12/12(Fri) 16:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: やっぱりフリーズします
>   On Error Resume Next
この部分はコメントにしておいて下さい。

後で log.txt を見てすべて遅れているのでしょうか?

>     List1.ListIndex = 0
>     List1.ListIndex = lngCount
>     Filen = List1.List(List1.ListIndex)

上記は Filen = List1.List(lngCount) の方が簡単では 

For lngCount = 0 To 0 や 1 でもフリーズするのでしょうか?

ログファイルの書込みの部分をコメントアウトしても同じですか?    

>     Inet1.Execute , "PUT " & Chr$(34) & Filen & Chr$(34) & " " & Filen1
の次にでも debug.Print Filen,Filen1  の1行を入れてパスやファイル名が
間違いないか確認してください。

投稿時間:2003/12/12(Fri) 17:03
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re^2: やっぱりフリーズします

> >     Inet1.Execute , "PUT " & Chr$(34) & Filen & Chr$(34) & " " & Filen1
> の次にでも debug.Print Filen,Filen1  の1行を入れてパスやファイル名が
> 間違いないか確認してください。

C:\Documents and Settings\既定\デスクトップ\dradro130.lzh             dradro130.lzh

一応デバッグを調べる上感じです。

1にすると読み込んでくれません。

投稿時間:2003/12/12(Fri) 17:54
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: やっぱりフリーズします
> 1にすると読み込んでくれません。

1.どうしてですか?
For lngCount = 0 To 0  なら1件のファイルが送れて
For lngCount = 0 To 1  なら2件のファイルが送れると思うのですが

2.ログファイルの中はどうなっていたのでしょうか?
3.On Error Resume Next の部分はどうされたのでしょうか?
  エラーが発生していないのでしょうか?
4.ログファイルの書込みの部分をコメントアウトしても同じですか? の結果は
5.debug.Print で表示されたものは ListBoxの内容と間違いないのでしょうか(件数も)
6.下記の部分はループの前で実行して下さい。TensouT は同じディレクトリですよね
  ルートディレクトリからのパスですか?
>     Inet1.Execute , "CD " & TensouT ' ディレクトリの変更
>    
>     Do While Inet1.StillExecuting = True
>         DoEvents
>     Loop


考えられる事をひとつひとつつぶしていかなければ原因が特定できないかと思うのですが?

あと、ファイルを違う場所に移してどうなるか?
送付するファイルを変更(サイズの小さい物に)してみたらどうなるか?

私が確認出来るわけがないので状況を詳しく教えて頂かないと判断できないので
上記の事の結果を教えて下さい。

投稿時間:2003/12/12(Fri) 18:43
投稿者名:のっこ
Eメール:
URL :
タイトル:
こんな感じです
reg.txt readme.txt 二つのファイルで試してみました。

> 1.どうしてですか?
> For lngCount = 0 To 0  なら1件のファイルが送れて
> For lngCount = 0 To 1  なら2件のファイルが送れると思うのですが
リストの最初のファイルが転送できないから
For lngCount = 1 To List1.ListCount - 1
にしました。
でも最初のファイルのみ。

> 2.ログファイルの中はどうなっていたのでしょうか?
For lngCount = 1 To List1.ListCount - 1
にしたら

reg.txtを転送。
reg.txtを転送。

最初のファイルが2回書き込まれました。

> 3.On Error Resume Next の部分はどうされたのでしょうか?
>   エラーが発生していないのでしょうか?
そのままでエラーなしです。

> 4.ログファイルの書込みの部分をコメントアウトしても同じですか? の結果は
同じです。

> 5.debug.Print で表示されたものは ListBoxの内容と間違いないのでしょうか(件数も)
間違いありませんが最初の一件です。

投稿時間:2003/12/12(Fri) 18:57
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: こんな感じです
> > 1.どうしてですか?
> > For lngCount = 0 To 0  なら1件のファイルが送れて
> > For lngCount = 0 To 1  なら2件のファイルが送れると思うのですが
> リストの最初のファイルが転送できないから

どうして転送できないのですか? 変だと思いません。
ブレークポイントを設定して変数の中身がどうなっているのか?
1件目のデータを転送する場合はプログラムは実行されているか確認しましたか?
その時のdebug.Print には何が表示されましたか。
では、For lngCount = 1 To 1 ならうまく送れるのでしょうか?

投稿時間:2003/12/12(Fri) 19:33
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re^2: こんな感じです

> どうして転送できないのですか? 変だと思いません。
> ブレークポイントを設定して変数の中身がどうなっているのか?

何故かブレークポイントなしで実行だけでも
C:\Documents and Settings\既定\デスクトップ\reg.txt     reg.txt

> 1件目のデータを転送する場合はプログラムは実行されているか確認しましたか?
> その時のdebug.Print には何が表示されましたか。

C:\Documents and Settings\既定\デスクトップ\reg.txt     reg.txt

> では、For lngCount = 1 To 1 ならうまく送れるのでしょうか?

最初の一件のみ転送できます。

投稿時間:2003/12/12(Fri) 19:44
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: こんな感じです

> > では、For lngCount = 1 To 1 ならうまく送れるのでしょうか?
>
> 最初の一件のみ転送できます。
最初の1件??2件目では

For lngCount = 0 To 0 では遅れないなら

List1.List(0) には何が入っているのですか?

投稿時間:2003/12/12(Fri) 19:31
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
これを試して下さい
新たに下記のコードを試して下さい。私の環境では問題なく動作しました。
Option Explicit
Private Sub Form_Load()
    List1.AddItem "c:\reg.txt"      'ファイルに合せて変更して下さい
    List1.AddItem "c:\readme.txt"   'ファイルに合せて変更して下さい
End Sub
Private Sub Command1_Click()
    Dim Filen    As String
    Dim Filen1   As String
    Dim lngCount As Long
    With Inet1
        'ここから
        .URL = "ftp://www.***************"  '変更可
        .UserName = "********"              '変更可
        .Password = "********"              '変更可
        .Execute , "CD " & "****/"          '変更可
        'ここまではご自分の環境に合わせて変更して下さい。
        
   '======= これ以降は変更しないで下さい。===============
        Do While .StillExecuting = True
            DoEvents
        Loop
        For lngCount = 0 To List1.ListCount - 1
            Filen = List1.List(lngCount)
            Filen1 = Right(Filen, Len(Filen) - InStrRev(Filen, "\"))
            .Execute , "PUT " & Chr$(34) & Filen & Chr$(34) & " " & Filen1
            Do While .StillExecuting = True
                DoEvents
            Loop
        Next lngCount
    End With
    MsgBox "ファイル転送が完了しました"
End Sub

投稿時間:2003/12/12(Fri) 20:01
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re: これを試して下さい
こちらでも問題なく動作しました。

でもどう手直しすればいいか悩みます。

投稿時間:2003/12/12(Fri) 20:11
投稿者名:のっこ
Eメール:
URL :
タイトル:
Re^2: これを試して下さい
> こちらでも問題なく動作しました。
でもフリーズの時間は短い気もします。

投稿時間:2003/12/12(Fri) 20:13
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: これを試して下さい
> > こちらでも問題なく動作しました。
> でもフリーズの時間は短い気もします。

そもそも、フリーズ ってどのような状態の事を言っておられるのでしょうか?
転送完了のメッセージがでてからでもマウスのクリック等ができないのでしょうか?

投稿時間:2003/12/12(Fri) 20:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: これを試して下さい
> こちらでも問題なく動作しました。
> でもどう手直しすればいいか悩みます。

だったらListBoxにもう少しファイルを追加して確認して下さい。
それで問題なければ、このコードを元に1箇所づつ変更しながら確認して見て下さい。
必ず変更した事に確認していけばどこが問題か解るかと思います。

因みに、ListBoxには今までどのように登録されていたのですか?
ファイル名の後ろに空白が入ったりしていませんか。

投稿時間:2003/12/12(Fri) 20:23
投稿者名:のっこ
Eメール:
URL :
タイトル:
今日は有難う御座いました

> 因みに、ListBoxには今までどのように登録されていたのですか?
ドラッグ&ドロップで登録していました。

> ファイル名の後ろに空白が入ったりしていませんか。
文字列の数を調べてみます。

今日は有難う御座います。

投稿時間:2003/12/13(Sat) 01:22
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
コードの追加
念のため下記コードを追加しておいて下さい。
それとVBのバージョンは間違いなく 6.0(SP5) ですよね。

        Next lngCount
    '追加の部分
        .Execute , "close"
        Do While .StillExecuting = True
            DoEvents
        Loop

    End With

投稿時間:2003/12/13(Sat) 09:50
投稿者名:のっこ
Eメール:
URL :
タイトル:
解明しました
おはようございます。

解明しました。

Inet1のプロパティのProtocolをicDefaultにすると終了してもフリーズになりません。
それで転送もできますが、FTPサーバーに転送するのにicFTPにすると問題があるのでしょうか?

でも、解決できました。マナーが悪い私にここまで懸命に教えて下さり有難う御座いました。

投稿時間:2003/12/13(Sat) 10:52
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 解明されたのならいいのですが?
> Inet1のプロパティのProtocolをicDefaultにすると終了してもフリーズになりません。
> それで転送もできますが、FTPサーバーに転送するのにicFTPにすると問題があるのでしょうか?

解決されたならいいのですが、私の環境では Inet1.Protocol = icFTP でも問題ありません
一部のプロバイダーでは Inet1.Protocol = icFTP  に設定しないとうまく転送されないと
言った書き込みがありましたが??
使用されるなら、デザイン時に設定せずにコード上でファイルの転送のところだけ使用され、
後は元に戻せば問題ないのでは。
私の場合はどちらで使用しても問題ありませんでした。
プロバイダーの設定に関係があるのかも知れませんが、今調べた限りでは詳しい情報は見
つかりませんでした。