WindowsCE5.0でのFtpFindFirstFileについて


xyz  2007-08-23 01:21:14  No: 143808

VB.NET初心者です。

次の環境でFTPへ接続するプログラムを組んでいます。
掲示板などを調べて、どうにか「FtpGetFile」や「FtpPutFile」はできる
ようになったのですが、「FtpFindFirstFile」ができません。
解決方法をご存知の方がいらっしゃったら教えて下さい。

【開発環境】 
・WinXP pro 
・VS2005(VS2005 VB.net スマートデバイス開発) 

【実行環境】 
・WindowsCE5.0 
・Compact Framework 2.0 

【ソース】
'==== 構造体・定義等 =====
Option Strict Off
Option Explicit On
Imports System.Runtime.InteropServices

Module MenteModule
    Public Const FTP_CONNECT_MSG As String = "test"
    Public Const INTERNET_DEFAULT_FTP_PORT As Integer = 21
    Public Const INTERNET_SERVICE_FTP As Integer = 1
    Public Const INTERNET_FLAG_PASSIVE As Integer = &H8000000
    Public Const INTERNET_OPEN_TYPE_PRECONFIG As Integer = 0
    Public Const INTERNET_OPEN_TYPE_DIRECT As Integer = 1
    Public Const INTERNET_OPEN_TYPE_PROXY As Integer = 3
    Public Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY As Integer = 4
    Public Const MAX_PATH As Integer = 260
    Public Const PassiveConnection As Boolean = True
    Public Const FTP_TRANSFER_TYPE_UNKNOWN As Integer = &H0&
    Public Const FTP_TRANSFER_TYPE_ASCII As Integer = &H1&
    Public Const FTP_TRANSFER_TYPE_BINARY As Integer = &H2&
    Public Const FILE_ATTRIBUTE_NORMAL As Integer = &H80
    Public Const INTERNET_FLAG_RELOAD As Integer = &H80000000
    Public Const FTPSENDKBN_BINARY As String = "0"
    Public Const FTPSENDKBN_ASCII As String = "1"
    Public Const MAX_PATH As Short = 260
    Public Const INTERNET_OPEN_TYPE_DIRECT As Short = 1
    Public Const INTERNET_INVALID_PORT_NUMBER As Short = 0
    Public Const INTERNET_SERVICE_FTP As Short = 1

    Structure FILETIME
        Dim dwLowDateTime As Integer
        Dim dwHighDateTime As Integer
    End Structure

    Structure WIN32_FIND_DATA
        Dim dwFileAttributes As Integer
        Dim ftCreationTime As FILETIME
        Dim ftLastAccessTime As FILETIME
        Dim ftLastWriteTime As FILETIME
        Dim nFileSizeHigh As Integer
        Dim nFileSizeLow As Integer
        Dim dwReserved0 As Integer
        Dim dwReserved1 As Integer
        <VBFixedString(MAX_PATH), System.Runtime.InteropServices.MarshalAs _
        (System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> _
        Public cFileName As String
        <VBFixedString(14), System.Runtime.InteropServices.MarshalAs _
        (System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=14)> _
        Public cAlternate As String
    End Structure

    Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenW" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As Integer

    Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectW" (ByVal hInternetSession As Integer,ByVal sServerName As String, ByVal nServerPort As Integer,ByVal sUserName As String, ByVal sPassword As String,ByVal lService As Integer, ByVal lFlags As Integer,ByVal lContext As Integer) As Integer

    Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Integer) As Integer

    Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileW" (ByVal hFind As Integer, ByRef  lpvFindData As WIN32_FIND_DATA) As Integer

    Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileW" (ByVal hFtpSession As Integer, ByVal lpszSearchFile As String, ByRef lpFindFileData As WIN32_FIND_DATA,  ByVal dwFlags As Integer, ByVal dwContent As Integer) As Integer

End Module

'====== 実行部分 =========
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Image
Imports System.IO

Public Class Test
    Private Sub Buttom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReadText.Click
        Dim hOpen As Integer = 0
        Dim hConnection As Integer = 0
        Dim result As Integer = 0
        Dim Pdata As New WIN32_FIND_DATA

        hOpen = InternetOpen(FTP_CONNECT_MSG, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)

        ' インターネットサービスのハンドルに成功したかチェックする
        If (hOpen <> 0) Then
            'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection
            hConnection = InternetConnect(hOpen, "XXX.XXX.XXX.XXX", INTERNET_DEFAULT_FTP_PORT, "user", "pw", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)

            ' 接続に成功したかチェックする
            If (hConnection <> 0) Then
                result = FtpFindFirstFile(hConnection, "*.*", Pdata, 0, 0)
                Me.msg2.Text = "結果: " & Pdata.cFileName & " コード = " & result
            Else
                Me.msg2.Text = "FTP接続に失敗"
            End If
        Else
            Me.msg2.Text = "インターネットサービスのハンドルに失敗"
        End If
        'FTPサーバへの接続を閉じる
        If (hConnection <> 0) Then InternetCloseHandle(hConnection)
        'インターネットサービスを閉じる
        If (hOpen <> 0) Then InternetCloseHandle(hOpen)
    End Sub
End Class


大吉末吉  2007-08-23 01:48:15  No: 143809

『Windows用の「WIN32_FIND_DATA」』と
『Windows CE用の「WIN32_FIND_DATA」』は、

構造が違うみたいですけど・・・

http://msdn2.microsoft.com/en-us/library/aa365740.aspx

http://msdn2.microsoft.com/en-us/library/ms915521.aspx


xyz  2007-08-27 19:22:06  No: 143810

大吉末吉さん回答ありがとうございます。

WindowsCEとWindowsでは構造が違うのですね…。
教えて頂いたサイトを見たのですが、「Windows Embedded」で実装されている感じでした。
初心者なので、これを見てもいまいちのですが、VB.NET(.NET Compact Framework)のサイトがあったりしないでしょうか?
ネットで検索したのですが、検索キーが悪いのか見つからなくて…。


大吉末吉  2007-08-27 20:03:53  No: 143811

> 「Windows Embedded」で実装されている感じでした。
> VB.NET(.NET Compact Framework)のサイトがあったりしないでしょうか?

申し訳ありませんが・・・私は見たことが無いです。

そもそも、「FtpFindFirstFile」等の関数は、VB.NET(.NET Framework)ではなく、
「Platform SDK」で実装されている関数ですから・・・
スマートデバイスで対応するのも、「.NET Compact Framework」はなく、「Windows Embedded」ってことになります。

> 初心者なので
頑張って勉強してください。ファイト!

ちなみに、冷静に宣言文の対応関係を確認すれば、どうすれば良いか推測できると思いますよ。


xyz  2007-08-27 20:17:32  No: 143812

大吉末吉さん、いつも回答ありがとうございます。

>「Platform SDK」で実装されている関数ですから・・・
> スマートデバイスで対応するのも、「.NET Compact Framework」はなく、
>「Windows Embedded」ってことになります。

「Windows Embedded」がよくわかってないので、的外れな質問になってしまうかもしれませんが、「Windows Embedded」で「FtpFindFirstFile」の関数を作りDLLにして「.NET Compact Framework」側でこのDLLを呼んで処理するなんて事はできるのでしょうか?

> 冷静に宣言文の対応関係を確認すれば、どうすれば良いか推測できると
> 思いますよ。

頑張って解析してみようと思います。


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

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






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