お問い合わせ

tel:0570-046-503

営業時間 10:00~17:00(定休日:土日祝日)

CSVファイルをFTPアップロードする C#版

   2015/08/04

久々にC#のネタです。


前回までの流れを引き継ぎ、

Yahooショッピングに在庫データベースファイルをアップロードする処理

を書いていきます。


まずは、CSVファイルの作成です。

フォーマットはこちらを参照。

http://developer.yahoo.co.jp/webapi/shopping/upload_format.html


code,sub-code,quantity,modeを設定すればよいので

あらかじめDataTableに定義しておきます。

こんな感じです。


このデータテーブルにあらかじめ値は入っていると仮定します。


aaa


そして下記のコードです。

            using (var sw = new System.IO.StreamWriter(
                outputPath, false, System.Text.Encoding.GetEncoding("Shift-JIS")))
            {
                //ヘッダを書き込む
                for (var j = 0; j < dt.Columns.Count; j++)
                {
                    var head = dt.Columns[j].Caption;
                    if (head == "_sub_code")
                    {
                        head = "_sub_code";
                    }
                    sw.Write("\"" + head + "\"");

                    if (j < dt.Columns.Count - 1)
                    {
                        sw.Write(",");
                    }
                }

                sw.Write("\r\n");
                
                //中身を書き込む
                for (var i = 0; i < dt.Rows.Count; i++)
                {
                    var row = dt.Rows[i];
                    for (var j = 0; j < dt.Columns.Count; j++)
                    {
                        var value = row[j].ToString();

                        value.Replace("\"", "");

                        sw.Write("\"" + value + "\"");

                        if (j < dt.Columns.Count - 1)
                        {
                            sw.Write(",");
                        }
                    }
                    //改行する
                    sw.Write("\r\n");
                }
            }

文字コードはShift-JISです。

StreamWriterを用いて、指定したパス(outputPath)に一時ファイルを作成します。


これでファイルが出来ました。

続いて、FTPアップロードです。

ここでは、PASVモードを有効にしています。


メソッド丸ごとご紹介します。

static void FtpUpload(
            string user,
            string password,
            string ftpPath,
            string ftpFile,
            string filePath
            )
        {
            var uplaodpath = System.IO.Path.Combine(ftpPath, ftpFile);
            
            Console.WriteLine("ftp接続開始");
            FtpWebRequest req = (FtpWebRequest)WebRequest.Create(uplaodpath);
            req.UsePassive = true;
            req.Credentials = new NetworkCredential(user, password);
            req.Method = WebRequestMethods.Ftp.UploadFile;
            req.UseBinary = true;
            req.KeepAlive = false;
           

            Console.WriteLine("ファイル書き込み開始");
            //アップロード対象ファイルを開き、ftp対象ファイルへ向けてバイナリ転送する。
            Stream reqStrm = req.GetRequestStream();
            FileStream fs = new System.IO.FileStream(filePath, FileMode.Open, FileAccess.Read);
            try
            {
                
                byte[] buffer = new byte[1024];
                while (true)
                {
                    int readSize = fs.Read(buffer, 0, buffer.Length);
                    if (readSize == 0) break;
                    reqStrm.Write(buffer, 0, readSize);
                }
                
            }
            finally
            {
                fs.Close();
                reqStrm.Close();
            }
            Console.WriteLine("アップロード完了");
        }

引数については下記のとおりです。

user:FTPユーザ

password:FTPパスワード

ftpPath:FTP上のパス

ftpFile:FTP上にアップロードするファイル名

filePath:アップロードするローカルのファイルパス(先ほど作成したCSVファイルのパス)


FtpWebRequestクラスを用いることで、簡単な手続きだけでアップロード処理が可能です。

このメソッドは共通化しておけば、他のFTPアップロード処理にも使えます。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)