アプリ版:「スタンプのみでお礼する」機能のリリースについて

ファイルリストを作成するソフトを作っています。VC++2010 ユニコードの設定で
コーディングしています。

韓国語を含むファイル名を出力しようとすると、韓国語以降の文字が処理されず、
仕様を変えました。

仕様変更後、リストコントロール上のアイテム(ファイル情報)をユニコードで入出力するのはうまくいっています。

しかし、警告が出て気分が悪いので、(コンパイルは通ります。)、この際推奨される記述を
したいです。

_wsetlocale(LC_ALL, _T("jpn"));も記述しています。


目的は、入力の時は、1行ずつ読込みたいです。なるべくソースの骨格を変えずに修正したいです。

問題の箇所は、
  int err = 0;
  CString rstr;
  CStdioFile stdFile(_tfopen(importFilePath, _T("r, ccs=UNICODE")));  //←警告がでる

  while (!err) {
    if (stdFile.ReadString(rstr) == FALSE) err = 1;
      ~処理~
  }

   //(6)クローズ(明示的)
  stdFile.Close();
  _wsetlocale(LC_ALL, _T(""));
  return 1;


警告内容:
警告  3  warning C4996: '_wfopen': This function or variable may be unsafe. Consider using _wfopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.  D:\Visual Studio 2010 - Data\Projects\FileListCreator_UNICODE_import_export(79)\FileListCreator\FileListCreatorDlg.cpp  2600

元のコードは以下のサイトを参考に作りました。
http://www.g-ishihara.com/mfc_fi_02.htm

できれば…
CStdioFile stdFile を残して、なんとかしたいです。

教えてくださるとうれしいです。

A 回答 (2件)

アンセーフコードが戻り値でFILE *を得られるのに対してセーフコードでは引数でなければ得られないのですから、当然FILE *を一旦何らかの変数に格納する手順が要る訳です。


従って#1お礼のコードで少なくとも正常系は間違っていない(本当は戻り値のerrnoを確認する必要がある)のですが、もともとこれらの関数はVisual C++独自関数なので移植性はありません。
弊害といえばそんなもんでしょう。
    • good
    • 0
この回答へのお礼

アドバイス頂きありがとうございます!
お礼が遅れてすみません。

#1 の方もご回答ありがとうございました。

お礼日時:2012/04/23 18:58

警告内容を読んでください.

この回答への補足

「_wfopen_s」を代わりに使った方がいいという意味はわかっての質問です。

http://msdn.microsoft.com/ja-jp/library/z5hh6ee9 …


errno_t fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);

このFiLE のポインターと CStdioFile stdFile をどうにかして、
関連付けて、ソースコードの修正を最小限にしたい という 意味の質問です。

補足日時:2012/04/21 01:25
    • good
    • 0
この回答へのお礼

  FILE *fp;
  _tfopen_s(&fp,importFilePath, _T("r, ccs=UNICODE"));

  CStdioFile stdFile(fp);

//http://msdn.microsoft.com/ja-jp/library/yeby3zcb …

2行にしただけですが、問題は回避できたのでしょうか?
全くの勘で作りました。一応警告も出ずに動いているようです。

・もっと良い書き方がある、
・ユーにコードを使うことによる弊害
             …等などございましたら、お教え下さい。

Webにhtml形式にしたリストファイルをUPしてますが、

<META http-equiv="Content-Type" content="text/html; charset=unicode">

と記述してますが、問題がでできますか?主要なブラウザで(ローカルで)試した所、
文字コードが間違っていても(↓)

<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

文字化けはありません。

お礼日時:2012/04/21 02:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!