バイナリファイルとして開くには? – プログラミング – Home

バイナリファイルとして開くには?
 
通知
すべてクリア

[解決済] バイナリファイルとして開くには?


うにゃ
 うにゃ
(@うにゃ)
ゲスト
結合: 24年前
投稿: 1
Topic starter  

Serialize関数を用いて(あらゆる拡張子の)ファイルをバイナリファイルとして開くにはどうしたらよいのでしょうか?(テキストファイルとしては読み込めました)

POSITION pos = GetFirstViewPosition();
CView* pEv = GetNextView(pos);
((CEditView*)pEv)->SerializeRaw(ar);

こんな感じ。

また、ダイアログを使って…

CFileDialog( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL).DoModal();
CString GetPathName(YomiFile1);
CFile( YomiFile1, CFile::modeRead | CFile::typeBinary);

こうやって、開いてみたけど「無効なファイル名です」なんて…
どなたか教えてください、お願いします。


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

> CFileDialog( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL).DoModal();
> CString GetPathName(YomiFile1);
> CFile( YomiFile1, CFile::modeRead | CFile::typeBinary);
> こうやって、開いてみたけど「無効なファイル名です」なんて…

普通は

CFile file;
CFileDialog dlg(TRUE ・・・);
if (dlg.DoModal()!= IDOK) return;
CString filename = GetPathName();
if (!file.Open(filename, CFile::modeREad | CFile::typeBinary)) return;

みたいに進みませんか?

Serializeは必要なのでしょうか?
(私は、使わないので、良くわかりませんけど・・・)


返信引用
うにゃ
 うにゃ
(@うにゃ)
ゲスト
結合: 24年前
投稿: 5
 

レスありがとうございます。
ソースを参考に自分がわかりやすいように、組みなおしました。

CString FileName1;
CFile fd;
CFileDialog dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL);
if ( dlg.DoModal() == IDOK)
{
FileName1 = dlg.GetPathName();
fd.Open( FileName1, CFile::modeRead | CFile::typeBinary);
}

エラーなく読み込めたようです。
これを表示するには、どうしたらよいでしょうか?
SDIアプリです。

CArchivcを使ってシリアル化して ->UpdateWindow() ?
それとも、1文字ずつ文字列に読み込んでいって ->TextOut() ?

たとえば…
int box;
while ( (box = fgetc(fd)) ! = EOF)
{


返信引用
うにゃ
 うにゃ
(@うにゃ)
ゲスト
結合: 24年前
投稿: 5
 

途中で送信してしまいました…続きです。

CArchivcを使ってシリアル化して ->UpdateWindow() ?
シシアル化で…

CString FileName1;
CFile fd;
CFileDialog dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL);
if ( dlg.DoModal() == IDOK)
{
FileName1 = dlg.GetPathName();
fd.Open( FileName1, CFile::modeRead | CFile::typeBinary);
extern CArchive ar;
fp = ar.GetFile();
CObject* ReadObject( const CRuntimeClass* ar);
Serialize( ar) -> UpdateWindow();

}

ウインドウへ表示させるために、こんな風に組み立てましたが…エラーでした。

error C2227: '->UpdateWindow' : 左側がクラス、構造体、共用体へのポインタではありません。

あともう少しでウインドウに表示できそうな気がするのですが…
ここら変は「VC++ML(Programming with VC++)」の過去ログにも乗っていませんでした。
もう一度、ご指導お願いします。

UpdateWindow のヘルプを見ると UpdateWindow(ウインドウのハンドル)
ってなっています。
ウインドウのハンドルを取得するために、
CWnd::CetActiveWindow
GetNextWindow
EnumWindows
で、取得できそうですが…ヘルプを見ると使えそうにないようです。
SDIアプリの場合、ウィンドウのハンドルってどうなるんですか?


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

ファイルをオープンするのであれば、シリアライズは不要だと思います。

それから、バイナリファイルとして開いて何をしたいのでしょうか?

UpdateWindow()は、MFCをお使いであれば

CWnd::UpdateWindow()という形で使えば良く、ハンドルは不要です。

GetSafeHwnd()で取得も可能ですけど・・・

CDC::TextOut()関数は文字列を出力しますので、文字列を準備しなければなりません。

文脈から、もう少し基礎的なところを学ばれたほうがよろしいかと・・・
(私もですけど・・・(^^; )


返信引用
うにゃ
 うにゃ
(@うにゃ)
ゲスト
結合: 24年前
投稿: 5
 

>文脈から、もう少し基礎的なところを学ばれたほうがよろしいかと・・・

自分でも重々承知しています。
勉強のために組み立ててたんです。

助言、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました