読み込みできません – プログラミング – Home

通知
すべてクリア

[解決済] 読み込みできません

固定ページ 1 / 2

レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

/////////////////////////////////////////////////////////////////////////////
// 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の出力が出ません。
ファイルの読み方が間違っていますか?
間違っている場合どのように訂正すると動作しますかご教授ください。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

書き込みが間違ってはいませんか?
どうやって書き込みました?
ちゃんと CArchive ar に対し ar << なにか; しましたか?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

もっと具体的に表示されている内容を説明しましょう。
これではどう出力されているのかさっぱり分かりません。

ところでOnDrawの中でMessageBoxだすと
OnDrawが繰り返し実行されて終われなくなりませんか?
デバッガで実行していれば止められるとは思いますけれど。
TRACEを使ったほうがいいと思いますけれど。

あと、ファイルはちゃんと開けているんですかねぇ?
開けていないファイルから読込はできないでしょう。


返信引用
レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

// 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をプログラムに直接書くのではなくファイル入力をします。
書き込みが間違っていないか?との質問の意味が理解できません。
詳しく教えてください。


返信引用
レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

書き忘れていました。
// AfxMessageBox(read);
しました。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

(1) 1.txtというファイルは存在しますか?
(2) 存在するならどのフォルダに存在しますか?EXEファイルとの位置関係は?
(3) 1.txtファイルの中身はどうなっていますか?
メモ帳で開くとどうなりますか?
バイナリエディタで開くとどうなりますか?


返信引用
DOSKOI-PANDA
 DOSKOI-PANDA
(@DOSKOI-PANDA)
ゲスト
結合: 22年前
投稿: 55
 

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 用の '<<' '>>' が
定義されてなかった。なんか事情があるんでしょう)


返信引用
DOSKOI-PANDA
 DOSKOI-PANDA
(@DOSKOI-PANDA)
ゲスト
結合: 22年前
投稿: 55
 

>1.txtに10と保存されています。

というのが、エディタやメモ帳などで調べたとしたら、
それは 10 という文字列で入ってんだから、

CString strA;

ar.ReadString(strA);
int a = StrToInt(strA);

かな?(試してないですが)


返信引用
レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

作成したフォルダの中にプログラムと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..
と表示されます。


返信引用
レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

後々数多くの数字として読み込み処理をしたいので、文字という読み込み方法や一文字
だけ読み込む方法では目的が達成しません^^。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

テキストとして出力されたファイルから読み込むのであれば、
あなたのその読み込み方は間違っています。

ふつーに

std::ifstream strem(1.txt);
int a;
stream >> a;

すればいいのとちゃいますか?


返信引用
レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

一番上のプログラムのコメント(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: '>>' : 演算子にプログラム上の作用がありません。
作用を持つ演算子を使用してください
となりエラーになりました。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

#include <fstream> してないでしょ?


返信引用
レイ
 レイ
(@レイ)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

エラー減りました。
一番上のstdエラーが残りました。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

include <ftream> しました? オシリに .h を付けてはいけません。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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