2009年12月25日

[mysql 15123] Re: バイナリデータの取り込みについて

岩崎です。

iida様、Eigo様、柳本様、chisa様、
返信有難うございます。

iida様、Eigo様、
strcpy()では、'\0'で止めるということはバイナリデータは
取り扱えない事になるのですね


chisa様
これは、とりあえずテスト用のコードです。
なのでメモリの確保やエラーチェックはしてません。
selectは、その前の段階でつまずいたので書きません
でした。
memcpy()一度、調べてみます。

CString型は'\0'がある場合は、だめみたいです
皆様、勉強不足ですいません。

MySQL言うよりVC++の問題ですね。

一から考え直してみます。有難うございました。

> @夜勤明けです。
>
> 少し細かいのと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@xxxxx
> Web http://chisa.dtdns.net
>
>
>


--------------------------------------
Get Disney character's mail address on Yahoo! Mail
http://pr.mail.yahoo.co.jp/disney/


投稿者 xml-rpc : 2009年12月25日 12:18
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/91689
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。