ファイルリストを作成するソフトを作っています。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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
アンセーフコードが戻り値でFILE *を得られるのに対してセーフコードでは引数でなければ得られないのですから、当然FILE *を一旦何らかの変数に格納する手順が要る訳です。
従って#1お礼のコードで少なくとも正常系は間違っていない(本当は戻り値のerrnoを確認する必要がある)のですが、もともとこれらの関数はVisual C++独自関数なので移植性はありません。
弊害といえばそんなもんでしょう。
No.1
- 回答日時:
警告内容を読んでください.
この回答への補足
「_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 をどうにかして、
関連付けて、ソースコードの修正を最小限にしたい という 意味の質問です。
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">
文字化けはありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- X(旧Twitter) Twitterの警告について 1 2022/09/07 18:28
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
VC++でUTF-8のファイルを出力したい
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
_T(abcdef") の_Tってなんですか?"
C言語・C++・C#
-
5
FindFirstFileとFindNextFileで検索される順番
C言語・C++・C#
-
6
「fatal error C1189」を回避するには?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
もしかして
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
Do~Loopした回数をカウントしたい
-
switch の範囲指定
-
VBAでセルに値が入力されるまで...
-
メルカリのメルカードで買い物...
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
リョウ・・・量?料?
-
Loadイベント中にほかのイベン...
-
findは動くがfindnextがマクロ...
-
自分の不注意で仕事で乗り合い...
-
VBの質問#if 0 then ってどう...
-
EXCEL VBA マクロ 実行する度に...
-
[ホルマール」って何ですか
-
VBA SaveChanges 上書きされない
-
vba 空のデータをSplitする時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
UMLでの例外処理
-
Do~Loopした回数をカウントしたい
-
VB.NET Excelを読み込んでDataT...
-
月度は何て読みますか?
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
iD
-
VBA SaveChanges 上書きされない
-
Select Case文でこのようなこと...
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
おすすめ情報