###前提・実現したいこと
いつもお世話になっております。
visualstudio 2015 のvb.netでFTPサーバーに格納されているファイルを
ローカルクライアントPCに受信する処理を開発しています。
画面でボタンを押してFTPサーバーにあるファイルを受信する
処理になります。
###発生している問題・エラーメッセージ
今起きている問題は、受信処理を立て続けに2度行うと、1度目に
受信したファイルは正常に取り込まれるのですが、2度目に受信した
ファイルが1度目に受信した内容と全く同じになってしまいます。
###該当のソースコード
visualBasic.NET
1コード 2Private Declare Function InternetConnect Lib "wininet" Alias "InternetConnectA" ( _ 3 ByVal hInet As System.IntPtr, _ 4 ByVal lpszServerName As String, _ 5 ByVal nServerPort As Int32, _ 6 ByVal lpszUsername As String, _ 7 ByVal lpszPassword As String, _ 8 ByVal dwService As Int32, _ 9 ByVal dwFlags As Int32, _ 10 ByVal dwContext As System.IntPtr) As System.IntPtr 11 12 ''' <summary> 13 ''' インターネットサービスをオープンして、インターネットハンドルを返します。 14 ''' </summary> 15 ''' <param name="lpszAgent">アプリケーションの名前を指定します。この名前が、HTTPプロトコルのユーザーエージェントとして使われます。</param> 16 ''' <param name="dwAccessType">接続方法。</param> 17 ''' <param name="lpszProxyName">プロクシサーバ名。(INTERNET_OPEN_TYPE_PROXY 指定時)</param> 18 ''' <param name="lpszProxyBypass">ローカルでの既知のホスト名またはIPアドレスのリスト。これらのホストに対する要求はプロクシを通さずに行われる。このリストにはワイルドカードを含めることができる。</param> 19 ''' <param name="dwFlags">オプション</param> 20 ''' <returns></returns> 21 ''' <remarks></remarks> 22 Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" ( _ 23 ByVal lpszAgent As String, _ 24 ByVal dwAccessType As Int32, _ 25 ByVal lpszProxyName As String, _ 26 ByVal lpszProxyBypass As String, _ 27 ByVal dwFlags As Int32) As System.IntPtr 28 29 30 31 32#Region "FTP接続" 33 ''' <summary> 34 ''' FTP接続 35 ''' </summary> 36 ''' <remarks></remarks> 37 Public Function FTPConnect(p_serverName As String, 38 p_user As String, 39 p_Pass As String, 40 p_mode As Integer 41 ) As Boolean 42 Dim strHost As String = "" 43 Dim result As Integer = 0 44 Dim ftpmode As Integer = 0 45 strHost = System.Net.Dns.GetHostName() 46 47 Dim blnResult As Boolean = False 48 hSession = System.IntPtr.Zero 49 Try 50 hSession = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0) 51 Catch ex As Exception 52 Return False 53 End Try 54 If hSession <> System.IntPtr.Zero Then 55 hFtpSession = System.IntPtr.Zero 56 Try 57 If p_mode <> 0 Then 58 '0以外はPASSIVEモード 59 ftpmode = INTERNET_FLAG_PASSIVE 60 Else 61 ftpmode = 0 62 End If 63 64 hFtpSession = InternetConnect(hSession, p_serverName, INTERNET_DEFAULT_FTP_PORT, 65 p_user, p_Pass, INTERNET_SERVICE_FTP, ftpmode, System.IntPtr.Zero) 66 Catch ex As Exception 67 Return False 68 End Try 69 If hFtpSession = System.IntPtr.Zero Then 70 Return False 71 Else 72 73 Return True 74 End If 75 Else 76 Return False 77 End If 78 79 End Function 80 81 82#Region "ファイルダウンロード" 83 ''' <summary> 84 ''' ファイルダウンロード 85 ''' </summary> 86 ''' <param name="fileNm">ファイル名</param> 87 ''' <param name="downFilePath">ダウンロードファイルパス</param> 88 ''' <returns>True:正常 False:異常</returns> 89 ''' <remarks></remarks> 90 Public Function GetFile(ByVal fileNm As String, ByVal downFilePath As String) As Boolean 91 Dim result As Integer = 0 92 93 Try 94 95 result = FtpGetFile(hFtpSession, fileNm, downFilePath, False, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY Or INTERNET_FLAG_RELOAD, 0) 96 97 98 If result = 0 Then 99 Return False 100 End If 101 Catch ex As Exception 102 Return False 103 End Try 104 105 Return True 106 End Function
###試したこと
ファイルを一旦受信し、そのあとにFTPサイトファイルを削除してまた受信処理を行ったところ、なんとまた前に受信したファイルが受信出来てしまいました。
このことから、FTP受信にしようしているローカル端末のキャッシュに残っている?
と推測し、
1回目のファイルを受信
↓
インターネットエクスプローラで「一時ファイルなどの履歴の削除」を行う。
↓
2回目のファイル受信
と行ったところ、2回目が正常な内容で受信ができました。
何とかプログラムでキャッシュを利用しない、依存しないようにできないのでしょうか?
FtpGetFileの引数を変えたり・・等いろいろしたのですが、、
恐れ入りますが、ご教示よろしくお願い申し上げます。
###補足情報(言語/FW/ツール等のバージョンなど)
.NETFRAMEWORK3.5
WINDOWS10
IE11
visualstudio 2015
回答2件
あなたの回答
tips
プレビュー