掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB.netでFTP受信を行うには? (ID:85684)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
魔界の仮面弁士様、宣言に関する指摘、ありがとうございました! ねろ様、ソースをありがとうございます! おかげさまで、接続->ディレクトリ移動->ディレクトリの取得->ファイルの取得まで、行うことができました。 そこで、また問題が発生してしまいました。 ファイルの取得コマンドであるFtpGetFileの取得ファイル名にワイルドカード、書き出しファイル名にディレクトリ指定ができれば、ここまでで思っているものはできるのですが、試してみた限り、双方ともファイル名を指定してやらなければ動かないのですね? FTPサーバーにあるファイル名が一部流動的に変化する(時間等を含んでいる)のでFTPサーバーのファイル名を取得してやらなければファイルを取得することができません。 そこで、"20040101122334.dat"というファイル名を取得しようとプログラムをを作ってみたのですが、取得される結果が".dat"となってしまいます。 '宣言部分: <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=4)> Public Structure WIN32_FIND_DATA Dim dwFileAttributes As Long Dim ftCreationTime As FILETIME Dim ftLastAccessTime As FILETIME Dim ftLastWriteTime As FILETIME Dim nFileSizeHigh As Long Dim nFileSizeLow As Long Dim dwReserved0 As Long Dim dwReserved1 As Long <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> Public FileName As String <VBFixedArray(14 - 1)> Dim cAlternate() As Byte Public Sub Initialize() FileName = "" 'ReDim FileName(MAX_PATH - 1) ReDim cAlternate(14 - 1) End Sub End Structure Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _ (ByVal hFtpSession As Integer, ByVal lpszSearchFile As String, _ ByRef lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Integer, ByVal dwContent As Integer) As Integer '実行部分: Dim i As Integer i = FtpFindFirstFile(hFtpSession, "*.dat", GtFindData, INTERNET_FLAG_RELOAD, 0) MsgBox(GtFindData.FileName)'ファイルネームが表示されるはず・・・ iは正常に取得されているようです。 いろいろ調べてみて、FileNameを配列型にして宣言部を以下のようにもしてみました。 (前略) <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> Public FileName() As String <VBFixedArray(14 - 1)> Dim cAlternate() As Byte Public Sub Initialize() 'FileName = "" ReDim FileName(MAX_PATH - 1) ReDim cAlternate(14 - 1) End Sub End Structure このようにした場合、情報取得時に ”'System.TypeLoadException' のハンドルされていない例外が ******.exe で発生しました。 追加情報 : 型 WIN32_FIND_DATA のフィールド FileName をマーシャリングできません : この型は構造体フィールドとして、マーシャリングできません。” というエラーが発生します。 これを何とかしないとファイルの取得ができそうにないのですが、試行錯誤してみても進展がありません。 たびたびすみませんが、よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.