FTP サーバーに接続して Upload する

FTP サーバーに接続して Upload する最も簡単なプログラムです。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの作成

  1. このプログラムは、私が作成した Network Object Class を使用します。
    空のプロジェクトを作成して main.cpp をプロジェクトに追加します。
  2. 次の領域に文字列を設定して下さい。
        char        szUserName[64]=         "プロバイダから指定されたID";
        char        szPassWord[64]=         "パスワード";
        char        szHost[64]=             "FTP アドレス";
        char        szBaseDir[64]=          "基準ディレクトリ";
        
    開発マシンに構築した FTP サーバー機能を使う場合の例です。
    IP アドレス "127.0.0.1" は、自分自身(ネットワークに出さずに折り返し) の指定です。
        char        szUserName[64]=         "maeda";
        char        szPassWord[64]=         "password";
        char        szHost[64]=             "127.0.0.1";
        char        szBaseDir[64]=          "./";
        
    プロバイダの FTP サーバーに接続する場合の例です。
        char        szUserName[64]=         "MAEDA";
        char        szPassWord[64]=         "password";
        char        szHost[64]=             "ftp.host.or.jp";
        char        szBaseDir[64]=          "./";
        
  3. ビルドから実行すると、実行の経過が Message Box で表示されます。
    自動的に現在時刻を設定した HTML ファイルがアップロードされたら完成です。
    Upload するファイル名は timeTTMMSS.html になっています。
    アップロードされたファイルをブラウザで表示して確認して下さい。


プログラムの説明

  1. windows.h と Network.h をインクルードして wininet.lib と Network.lib をリンクします。
    wininet.h は Network.h の中でインクルードしています。
    App は Network Object Class の定義です。
    buf[] は HTML ファイルの TEXT イメージを作成する領域です。
    HTMLName[] は HTML のファイル名を格納する領域です。
        #include    <windows.h>
        #include    "Network.h"
    
        #pragma     once
        #pragma     comment(lib,"wininet.lib")
        #pragma     comment(lib,"Network.lib")
    
        Network     *App= NULL;             //Network Object Class
        char        szUserName[64]=         "maeda";
        char        szPassWord[64]=         "password";
        char        szHost[64]=             "127.0.0.1";
        char        szBaseDir[64]=          "./";
        char        buf[1000];
        char        HTMLName[64];
        
  2. 自動的に現在時刻を設定した HTML ファイルの TEXT イメージを作成する関数です。
        void CreateHTML()
        {   SYSTEMTIME st;
    
            GetLocalTime(&st);
            wsprintf(HTMLName,"time%02d%02d%02d.html",st.wHour,st.wMinute,st.wSecond);
            wsprintf(buf,"\n\t\n\t\t現在の時刻は %04d/%02d/%02d %02d:%02d:%02dです.\n\t\n\n",
                     st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
            return;
        }
        
  3. FTP サーバーに HTML ファイルをアップロードする WinMain() 関数です。
    Network Object Class を使うとプログラムは簡単です。
    new で Object Class を生成します。
    App->FTPOpen() で FTP をオープンします。
    CreateHTML() でイメージを作成して App->FTPPut() でアップロードします。
    App->FTPClose() で FTP をクローズします。
    SAFE_DELETE(App) で Object Class を開放して下さい。
        int PASCAL  WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
        {   BOOL    rc;
    
            App= new Network(NULL);
            rc= App->FTPOpen(szHost,szUserName,szPassWord,szBaseDir);
            if (rc==FALSE)  return FALSE;
            MessageBox(NULL,"FTPに接続しました","接続完了",MB_OK);
    
            CreateHTML();
            if (App->FTPPut(HTMLName,buf)==TRUE)
                MessageBox(NULL, "無事アップロードできました", "OK", MB_OK);
    
            App->FTPClose();
            MessageBox(NULL,"インターネットから切り離しました","OK",MB_OK);
            SAFE_DELETE(App);
            return TRUE;
        }
        
  4. メンバー関数 App->FTPPut() の中では InternetWriteFile() を使っています。
    この関数は URL を指定してファイルを取得する で説明した InternetReadFile() と対の関数です。
        //ファイルの入力
        BOOLAPI
        InternetReadFile(
            IN HINTERNET hFile,
            IN LPVOID lpBuffer,
            IN DWORD dwNumberOfBytesToRead,
            OUT LPDWORD lpdwNumberOfBytesRead
            );
        
        //ファイルの出力
        BOOLAPI
        InternetWriteFile(
            IN HINTERNET hFile,
            IN LPCVOID lpBuffer,
            IN DWORD dwNumberOfBytesToWrite,
            OUT LPDWORD lpdwNumberOfBytesWritten
            );
        
  5. クライアントのハードディスクに格納されているファイルをアップロードするときは App->FTPUp() を使って下さい。
    メンバー関数 App->FTPUp() の中では FtpPutFile() を使用します。
    この関数は FtpGetFile() と対の関数です。
        if (App->FTPUp(UpLoadFileName,LocalFileName)==TRUE)
            MessageBox(NULL, "無事アップロードできました", "OK", MB_OK);
        

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)