mysql:15122
From: ちさ <ちさ <admin@xxxxxxxxxx>>
Date: Fri, 25 Dec 2009 01:59:20 +0900
Subject: [mysql 15122] Re: バイナリデータの取り込みについて
chisa@夜勤明けです。 少し細かいのとMYSQLから少し外れてしまうですが・・・ > CString sPath1("G:\\file1.***"); // 読込元のファイル > CString sPath2("G:\\file2.***"); // 保存先のファイル > char pD[100000]; // ファイルの読み書き用 ↑ハードコーディングすると後で死ぬ思いするかも。 > > // ファイルの取得(読込モード) > fopen_s(&pStream, sPath1, "rb"); > int n = fread(pD, sizeof(char), sizeof(pD), pStream); fclose(pStream); ↑読み込みファイルサイズがpDを超えた部分は切り捨てられるよ。 Cチックに書くと char *pD = NULL; FILE *fp = NULL; fopen節 if(!fp)〜でエラー処理 fseek(fp, 0L, SEEK_END); int Length = (int)ftell(fp); pD = (*char)malloc(sizeof(char) * Length); if(pD == NULL)〜でエラー処理 fseek(fp, 0L, SEEK_SET); fread(fp, Length, sizeof(char), fp); fclose(fp); 処理 free(pD); pD = NULL; といった具合に動的にメモリ確保した方がよいかも(端折りかつうろ覚えだからちゃ んと調べてね) > // char への変換 > pD == ""; ↑警告出ませんでしたか? 仮にpDに""を代入したい場合、C/C++でコレは通用しません。Cだとmemsetとかが一般 的かな。 > strcpy(pD, sSqlData); ↑皆様の仰るとおり\0の手前までしかコピーしてくれません。 バイナリの場合はCだとmemcpyを用いるのが一般的かな。 Insert文を作成している部分が抜けていますが、 作成前にバイナリファイルをエスケープする必要があります。 ↑にも書いてありますが、文字列は\0で終端を判定しています。 検索すればすぐ出てくるので調べてみて下さい。 Selectの処理も抜けているようですが、 insertと似たように配列をそのまま文字列としてコピーすると\0迄しか取ってくれま せん。 コレの対処法もマニュアルに記載されているので検索してみて下さい。 C/C++は頭が良すぎる言語なので書いたこと以外実行してくれません。 エラー処理もしてくれません。突然落ちます。最悪OSが壊れて起動しないと言うこと もあるそうです。 基本は0エラー0警告でコンパイルが終了することです。 送って頂いたソースが原文のままでしたら後で泣きを見ること間違い無しなので 今一度基礎をしっかり作り上げる事をお勧めするです。 無理にバイナリとして格納する必要性があるか考察の余地はあると思います。 C/C++だとテキストエンコーディング処理挟んでも体感速度は変わらないと感じま す。 以上 -- Chisa Mail:admin@xxxxxxxxxx Web:http://chisa.dtdns.net
15105 2009-12-14 19:00 [Honda Takayuki <hond] レプリケーションエラー(server id was not set) 15106 2009-12-14 20:26 ┗[Honda Takayuki <hond] 15115 2009-12-24 15:54 ┗[岩崎 誠司 <iwasaki_] バイナリデータの取り込みについて 15116 2009-12-24 16:01 ┣[<y-iida@xxxxxxxxxx> ] 15117 2009-12-24 16:25 ┣[岩崎 誠司 <iwasaki_] 15118 2009-12-24 17:17 ┃┗["Eigo Mori" <eigom@x] 15121 2009-12-24 19:45 ┣[Yoshiaki Yanagimoto ] -> 15122 2009-12-25 01:59 ┗[ちさ <admin@xxxxxxxx] 15123 2009-12-25 12:18 ┗[岩崎 誠司 <iwasaki_]