早速ですが質問させていただきます。
ReadFile,WriteFile関数を使ってメモ帳を作っているサンプルはたくさんあったのですが、
文字列以外(test[0]==1などの情報)を保存するにはどうしたらよいのでしょうか。
(一応fwriteやfreadをほかの関数と組み合わせて似た機能を作ることはできるのですが、
コモンダイアログボックスがかっこいいので使ってみたいのです。)
コードなしで申し訳ないのですが、よろしくお願いします。
ReadFile,WriteFile関数でデータを扱いたい
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ReadFile,WriteFile関数でデータを扱いたい
まずお断りしますが、コモンダイアログボックスとReadFile,WriteFile関数は何の関わりを持ちません。
コモンダイアログボックスを使った上でfread/fwriteを使うことも出来ますが、ReadFile,WriteFile関数をどうしても使いたいのでしょうか?
コモンダイアログボックスを使った上でfread/fwriteを使うことも出来ますが、ReadFile,WriteFile関数をどうしても使いたいのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
bonbo
Re: ReadFile,WriteFile関数でデータを扱いたい
>soft屋さん
ありがとうございます
>コモンダイアログボックスとReadFile,WriteFile関数は何の関わりを持ちません。
GetOpenFileName,GetSaveFileName関数
の後に別の関数を使って開くということでしょうか、
ReadFile,WriteFile関数しか知らないため、このようなタイトルでトピックを立ててしまいました。
この関数にこだわりはないのでそれ以外の方法で開くことができるならば、
その方法を教えていただけると助かります。
(必要でしたらトピックも立て直します。)
ありがとうございます
>コモンダイアログボックスとReadFile,WriteFile関数は何の関わりを持ちません。
GetOpenFileName,GetSaveFileName関数
の後に別の関数を使って開くということでしょうか、
ReadFile,WriteFile関数しか知らないため、このようなタイトルでトピックを立ててしまいました。
この関数にこだわりはないのでそれ以外の方法で開くことができるならば、
その方法を教えていただけると助かります。
(必要でしたらトピックも立て直します。)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ReadFile,WriteFile関数でデータを扱いたい
GetOpenFileName,GetSaveFileName関数で得られるのはファイル名なのでfopenすれば良いだけですね。
別トピックは立てなくて良いですよ。必要ならタイトルの方を書き換えます。
別トピックは立てなくて良いですよ。必要ならタイトルの方を書き換えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
bonbo
Re: ReadFile,WriteFile関数でデータを扱いたい
私は何か勘違いをしてるかもしれないのですが
fopenで開くと開くファイルのディレクトリに制限がかかったりしないでしょうか
fopenで開くと開くファイルのディレクトリに制限がかかったりしないでしょうか
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ReadFile,WriteFile関数でデータを扱いたい
>fopenで開くと開くファイルのディレクトリに制限がかかったりしないでしょうか
[誤解を生みそうな部分を補正]
VC++などのC言語で使われる標準関数のfopenはWindowsの場合は中でcreateFileしていますので、fopenで制限される様なディレクトリはcreateFileでも制限されます。
※ ReadFile,WriteFile関数のopenにあたる関数はcreateFileです。
[誤解を生みそうな部分を補正]
VC++などのC言語で使われる標準関数のfopenはWindowsの場合は中でcreateFileしていますので、fopenで制限される様なディレクトリはcreateFileでも制限されます。
※ ReadFile,WriteFile関数のopenにあたる関数はcreateFileです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
bonbo
Re: ReadFile,WriteFile関数でデータを扱いたい
>Windowsの標準関数のfopenは中でcreateFileしていますので、fopenで制限される様なディレクトリはcreateFileでも制限されます
すみません、実はfopenはexeと同じディレクトリからしか読み込めないと勘違いしていたのです。
どうやらいろいろな場所に保存できるようですね。
とりあえずコードを書いたのですが、
半分コピーなのでめちゃくちゃかもしれませんが
なんとか保存できました。
同じ要領でfreadのほうもできました。
どうもありがとうございました。
すみません、実はfopenはexeと同じディレクトリからしか読み込めないと勘違いしていたのです。
どうやらいろいろな場所に保存できるようですね。
とりあえずコードを書いたのですが、
int SaveTest(HWND hEdit)
{
FILE * fp;
OPENFILENAME ofn;
HANDLE hFile;
DWORD dwAccBytes;
LPTSTR lpszBuf;
HGLOBAL hMem;
hMem = GlobalAlloc(GHND, sizeof(int) * 10); //int型のファイル10個分の領域を確保
lpszBuf = (LPTSTR)GlobalLock(hMem); //
memset(&ofn, 0, sizeof(OPENFILENAME)); //ofnのアドレスからsizeof(OPENFILENAME)だけ0で書き換える
ofn.lStructSize = sizeof(OPENFILENAME); //自分の環境でのOPENFILENAME型のサイズを特定
ofn.hwndOwner = hEdit; //owner
ofn.lpstrFilter = TEXT("テスト(*.test)\0*.test\0All files(*.*)\0*.*\0\0"); //保存形式の制限
ofn.lpstrFile = szFile; //保存するファイル名
ofn.lpstrFileTitle = szFileTitle; //
ofn.nFilterIndex = 1;
ofn.nMaxFile = MAX_PATH; //十分な大きさ
ofn.nMaxFileTitle = MAX_PATH; //
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; //上書きの確認とreadonly非表示
ofn.lpstrDefExt = TEXT("TeSt"); //デフォルト名
ofn.lpstrTitle = TEXT("名前を付けて保存する"); //タイトル欄
if(GetSaveFileName(&ofn) == 0){ //コモンダイアログボックスが開けなかったらエラー
MessageBox(hEdit,
TEXT("ファイルが開けません"),
TEXT("テスト"),
MB_ICONEXCLAMATION | MB_OK);
return -1;
}
fp=_tfopen(szFile,TEXT("wb"));
fwrite(test1,sizeof(int),10,fp);
fclose(fp) ;
SendMessage(hEdit, EM_SETMODIFY, FALSE, 0);
GlobalUnlock(hMem);
GlobalFree(hMem);
return 0;
}
なんとか保存できました。
同じ要領でfreadのほうもできました。
どうもありがとうございました。