![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスのクエリでコンパイル...
-
VBでファイルが開かれているか...
-
PowerShellを使って関連付けら...
-
FORTRANの実行エラーについて
-
ファイルクローズ(fclose)でエ...
-
ファイルをクローズしたい
-
Access2010 コンパイルエラー...
-
Excel2013 VBAでAccess2013に接...
-
freadでデータがない場合の読込...
-
batファイルでレジストリキーの...
-
EXCELのVBAでWORDが開いてある...
-
「複数の選択範囲に対して実行...
-
パソコンで受信したGmailのファ...
-
NAS上のファイルの使用中が解除...
-
エクセルマクロでエラーの原因...
-
VBA アプリケーション定義また...
-
fcloseで発生するエラーについて。
-
VB6 Dir関数で52エラー発生
-
エクセル VBA dll 読み込...
-
VBから参照できないCのDLLを使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでファイルが開かれているか...
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
freadでデータがない場合の読込...
-
【COBOL】read文でエラー
-
gccを行ってもexeファイルが生...
-
ファイルクローズ(fclose)でエ...
-
VB6 Dir関数で52エラー発生
-
ACCESS VBAでのインポート
-
NAS上のファイルの使用中が解除...
-
FTPの送信結果を検知したい
-
エクセルマクロでエラーの原因...
-
Access2013にてドラッグ&ドロ...
-
EXCELのVBAでWORDが開いてある...
-
fcloseで発生するエラーについて。
おすすめ情報