![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Win32APIを使って、ファイルの保存ダイアログを表示→ファイルを指定→保存ボタンを押す→指定されたファイルに書き込む→指定したファイルを保存 というプログラムを作りたいと考えています。しかし、ファイルに書き込んだ後どう保存すればいいかわからないので教えてください。s[256]をfilename_fullに書き込んで保存したいです。この場合プログラムは抜粋したものなので、s[256]に文字が格納してあると考えてください。
char s[256];
FILE *fp;
static OPENFILENAME ofn;
static TCHAR filename_full[MAX_PATH];// ファイル名(フルパス)を受け取る領域
static TCHAR filename[MAX_PATH];// ファイル名を受け取る領域
// 構造体に情報をセット
ZeroMemory( &ofn, sizeof(ofn) ); // 最初にゼロクリアしておく
ofn.lStructSize = sizeof(ofn); // 構造体のサイズ
ofn.hwndOwner = hWnd; // コモンダイアログの親ウィンドウハンドル
ofn.lpstrFilter = _T("text(*.txt)\0*.txt\0All files(*.*)\0*.*\0\0"); // ファイルの種類
ofn.lpstrFile = filename_full; // 選択されたファイル名(フルパス)を受け取る変数のアドレス
ofn.lpstrFileTitle = filename; // 選択されたファイル名を受け取る変数のアドレス
ofn.nMaxFile = sizeof(filename_full); // lpstrFileに指定した変数のサイズ
ofn.nMaxFileTitle = sizeof(filename); // lpstrFileTitleに指定した変数のサイズ
ofn.Flags = OFN_OVERWRITEPROMPT; // フラグ指定
ofn.lpstrTitle = _T("名前を付けて保存");// コモンダイアログのキャプション
ofn.lpstrDefExt = _T("txt"); // デフォルトのファイルの種類
// 名前を付けて保存コモンダイアログを作成
if( !GetSaveFileName( &ofn ) )
{
MessageBox( hWnd, _T("エラー"), _T("エラー"), MB_OK );
SendMessage( hWnd, WM_CLOSE, 0, 0 );
}else{
if((fp=fopen(filename_full,"w")) == NULL) {
MessageBox( hWnd, _T("エラー"), _T("エラー"), MB_OK );
SendMessage( hWnd, WM_CLOSE, 0, 0 );
exit(0);/* (3)エラーの場合は通常、異常終了する */
}
/*ここからがわかりません*/
/*s[256]をファイルに書き込んで、保存するプログラムを教えてください。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
バイナリとして書き出したいのならfwrite()ですかね。
まぁfopen()はテキストモードでオープンしているようなのでfwrite()はふさわしくないかも知れませんが。
あと……GetSaveFileName()はWin32APIですが、fopen()はWin32APIというよりCの標準関数です。
掲示されたコードだと……
GetSaveFileName()でキャンセルしたりしたときにおかしなコトになってしまいますが…
>MessageBox( hWnd, _T("エラー"), _T("エラー"), MB_OK );
で、エラーを表示、
>SendMessage( hWnd, WM_CLOSE, 0, 0 );
で、おそらく自分自身のウィンドウを閉じるように指示して…
/*ここからがわかりません*/以降の処理に流れます。
そうすると、これから記述するであろうファイルアクセスの処理に入りますが、その時fpには何が入っているでしょうか?
# ということで、ほぼ確実にここで吹っ飛ぶ。
ファイルオープンに失敗したら……
>SendMessage( hWnd, WM_CLOSE, 0, 0 );
閉じるように指示して、
>exit(0);/* (3)エラーの場合は通常、異常終了する */
そのまま終了します。
# エラー終了ならプロセスの終了コードは0以外…が適当と思われますが。
おそらくイベントプロシージャでの記述でしょうから、そのまま抜けるのが適当ではないですか?
# 単にreturnだけか、何らかの戻り値が必要か…はここだけでは判りませんけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
cube PDFについて
-
エラー:インクルードファイル ...
-
PCにmicroSDカードを(USBで)差...
-
VBA ExecuteExcel4Macro 型が一...
-
FTPの送信結果を検知したい
-
AutoExecで自動終了させるには?
-
batファイルでレジストリキーの...
-
イベントが発生しない vba
-
gccを行ってもexeファイルが生...
-
ファイルの有無を確認した際の...
-
画像読み込み失敗の判定
-
freadでデータがない場合の読込...
-
エクセル VBA dll 読み込...
-
NAS上のファイルの使用中が解除...
-
CFileのReadでの例外エラー#38...
-
Access2010 コンパイルエラー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Returnに対するGoSubがありません
-
VBでファイルが開かれているか...
-
batファイルでレジストリキーの...
-
「パス名が無効です」の発生原因
-
FTPの送信結果を検知したい
-
アクセスのクエリでコンパイル...
-
ACCESS VBAでのインポート
-
VBから参照できないCのDLLを使...
-
VB6 Dir関数で52エラー発生
-
すでにファイルが開かれている...
-
freadでデータがない場合の読込...
-
access テキストボックスの値取得
-
fgets関数のEOFの扱い方について
-
NAS上のファイルの使用中が解除...
-
Access2013にてドラッグ&ドロ...
-
【COBOL】read文でエラー
-
エクセル VBA dll 読み込...
-
PowerShellを使って関連付けら...
-
アクセスでイベントのロジック...
-
エクセルマクロでエラーの原因...
おすすめ情報