/////////////////////////////////////////////////////////////////////////////
// CVcgrphView クラスの描画
void CVcgrphView::OnDraw(CDC* pDC)
{
CVcgrphDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
int a;
char c[30];
AfxMessageBox(read);
CFile fp(1.txt,CFile::modeRead);
CArchive ar(&fp,CArchive::load);
ar>>a;
ar.Close();
sprintf(c,%d,a);
pDC->TextOut(200,200,c);
}
aの出力が出ません。
ファイルの読み方が間違っていますか?
間違っている場合どのように訂正すると動作しますかご教授ください。
書き込みが間違ってはいませんか?
どうやって書き込みました?
ちゃんと CArchive ar に対し ar << なにか; しましたか?
もっと具体的に表示されている内容を説明しましょう。
これではどう出力されているのかさっぱり分かりません。
ところでOnDrawの中でMessageBoxだすと
OnDrawが繰り返し実行されて終われなくなりませんか?
デバッガで実行していれば止められるとは思いますけれど。
TRACEを使ったほうがいいと思いますけれど。
あと、ファイルはちゃんと開けているんですかねぇ?
開けていないファイルから読込はできないでしょう。
// AfxMessageBox(read);
// CFile fp(1.txt,CFile::modeRead);
// CArchive ar(&fp,CArchive::load);
// ar>>a;
// ar.Close();
// sprintf(c,%d,a);
の代わりに
a=10;
とする場合、出力は画面に10と表示されるプログラムです。
1.txtに10と保存されています。
その10をプログラムに直接書くのではなくファイル入力をします。
書き込みが間違っていないか?との質問の意味が理解できません。
詳しく教えてください。
書き忘れていました。
// AfxMessageBox(read);
しました。
(1) 1.txtというファイルは存在しますか?
(2) 存在するならどのフォルダに存在しますか?EXEファイルとの位置関係は?
(3) 1.txtファイルの中身はどうなっていますか?
メモ帳で開くとどうなりますか?
バイナリエディタで開くとどうなりますか?
void CTestDlg::OnBtnWriteFileTest()
{
CFile oFile(data.txt,
CFile::modeWrite|CFile::modeCreate);
CArchive oArc(&oFile, CArchive::store);
int a = 10;
oArc << a;
oArc.Close();
}
と書いて実行してみると、data.txt の中身は、
0A 00 00 00 (EOF)
んなってました。
CArchive ってあんまし使ったことないですが、
入力出力が対応しているとすると、
上記のやり方で書いたものでないと、
int a;
oArc >> a;
というやり方では読めないのでは(実験中途半端)
(CArchive 調べてみると、LPCTSTRと CString 用の '<<' '>>' が
定義されてなかった。なんか事情があるんでしょう)
>1.txtに10と保存されています。
というのが、エディタやメモ帳などで調べたとしたら、
それは 10 という文字列で入ってんだから、
CString strA;
ar.ReadString(strA);
int a = StrToInt(strA);
かな?(試してないですが)
作成したフォルダの中にプログラムと1.txtがあります。
実行した結果のEXEファイルは作成したフォルダの中のDebugの中に存在します。
テキストをメモ帳で開けると
10
と表示されます。
BZ( http://www.vector.co.jp/soft/dl/win95/util/se032859.html)のバイナリエディ
タで開くと
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
000000 31 30 0D 0A 10..
と表示されます。
後々数多くの数字として読み込み処理をしたいので、文字という読み込み方法や一文字
だけ読み込む方法では目的が達成しません^^。
テキストとして出力されたファイルから読み込むのであれば、
あなたのその読み込み方は間違っています。
ふつーに
std::ifstream strem(1.txt);
int a;
stream >> a;
すればいいのとちゃいますか?
一番上のプログラムのコメント(14:06:42、14:07:30)したもの結果はになります。
10になるはずなのですが168636465と出ます。
std::ifstream strem(1.txt);
int a;
stream >> a;
のプログラム結果は
C:\ .cpp(80) : error C2653: 'std' : 識別子がクラス名でも名前空間名でもありませ
ん。
C:\ .cpp(80) : error C2065: 'ifstream' : 定義されていない識別子です。
C:\ .cpp(80) : error C2146: 構文エラー : ';' が、識別子 'stream' の前に必要です。
C:\ .cpp(80) : error C2065: 'stream' : 定義されていない識別子です。
C:\ .cpp(82) : warning C4552: '>>' : 演算子にプログラム上の作用がありません。
作用を持つ演算子を使用してください
となりエラーになりました。
#include <fstream> してないでしょ?
エラー減りました。
一番上のstdエラーが残りました。
include <ftream> しました? オシリに .h を付けてはいけません。