DOBON.NET DOBON.NETプログラミング掲示板過去ログ

FTPサーバからのファイル取得

環境/言語:[WindowsCE6.0、.NETcompactFramework3.5、VisualStudio2008、C#]
分類:[.NET]

・開発環境
 WindowsCE6.0
 .NETcompactFramework3.5
 VisualStudio2008
 C#

・現象
 FtpGetFile関数を用いてFTPサーバからファイルを取得しているのですが、
 何回も取得していると、FtpGetFile関数がtrueを返しているにも
 かかわらず、端末からFTPサーバにコマンドが送信されていないという
 現象が発生しています。成功するときもあり、失敗することもある
 ことが厄介です。

・考察&質問
 FtpGetFile関数の定義関係や、パラメータに不適切なものがあるのでは
 ないかと推測し、pinvokeのサイトの定義と比較してみました。
 今回はCE機であるため、そのまま使えないと思うのですが
 知識が不足しており、何が間違っているのか正しいのか判断が
 つかない状況です。
 お分かりの方、ご指摘頂けましたら幸いです。

 現象が発生している定義
 [DllImport("wininet.dll", EntryPoint = "FtpGetFileW", SetLastError = true, CharSet = CharSet.Unicode)]
 private static extern bool FtpGetFile(
   IntPtr ulConnect,
   string strRemoteFile,
   string strLocalFile,
   bool bFailIfExist,
   uint uiFlagsAndAttributes,
   uint uiFlags, uint uiContext);

 pinvokeサイトの定義
    [DllImport("wininet.dll", EntryPoint = "FtpGetFile", SetLastError = true, CharSet = CharSet.Auto)]
     [return: MarshalAs(UnmanagedType.Bool)]
     private static extern bool FtpGetFile(
         IntPtr hFtpConn,
         string strSource,
         string strTarget,
         [MarshalAs(UnmanagedType.Bool)] bool bFailIfExists,
         uint nFlagsAndAtrribute,
         uint nFlags,
         uint nContext);

よろしくお願い致します。
自己解決致しました。
ご報告させていただきます。

原因
 FtpGetFile関数の第6引数(nFlags)の設定が
 FTP_TRANSFER_TYPE_BINARYのみであったため
 キャッシュがONになっていた。

対策
 INTERNET_FLAG_RELOADを追加で設定することで
 キャッシュを利用せずに、毎回FTPサーバから
 受信されます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板