ファイル出力 – プログラミング – Home

通知
すべてクリア

ファイル出力

固定ページ 1 / 2

makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

こんにちは。
皆様にはいつもお世話になっています。

今回はファイルの出力がうまくいかないので
質問させていただきます。

CFile MyFile ;
UINT fp ;
CString str;

if ((fp = MyFile.Open( wcharFileNm, CFile::modeWrite )) == NULL)
{
// OPENエラー処理
MessageBox(_T(FILE OPEN ERR), _T(ファイルオープン), MB_OK
| MB_ICONEXCLAMATION);
}else{

// MyFile( wcharFileNm, CFile::modeWrite);

POS = lstTenken1.GetHeadPosition( );
while (POS != NULL){
count++;
//if (POS != NULL ){
_CTenken1 *pTenken1 = (_CTenken1*)lstTenken1.GetNext
( POS );
Date = pTenken1->Get_Date();
BashoCode = pTenken1->Get_BashoCode();


引用解決済
トピックタグ
makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

すみません!
間違えてしまいました。続きです。

POSITION POS;
CFile MyFile ;
UINT fp ;
CString str;

CString Date;
CString BashoCode;

wcharFileNm = TEXT(\\temp\\Tenken1_Mst.csv) ;
if ((fp = MyFile.Open( wcharFileNm, CFile::modeWrite )) == NULL)
{
// OPENエラー処理
MessageBox(_T(FILE OPEN ERR), _T(ファイルオープン), MB_OK         
 |MB_ICONEXCLAMATION);
}else{
POS = lstTenken1.GetHeadPosition( );
while (POS != NULL){
_CTenken1 *pTenken1 = (_CTenken1*)lstTenken1.GetNext( POS );
Date = pTenken1->Get_Date();
BashoCode = pTenken1->Get_BashoCode();

str = Date + , + BashoCode + \n;

MyFile.Write( str, str.GetLength());
}
}

MyFile.Close();

このような処理をしているのですが
出力がうまくいきません。

実行した後に
出力ファイルを見ると何も変わっていないのですが
再度ファイルオープンをすると
「An unknown error occurred while accessing an unnamed file」
というエラーがでます。

正しく出力させるにどうしたらよいのでしょうか。
アドバイスをお願いします。

eMbedded VisualC++


返信引用
高1
 高1
(@高1)
ゲスト
結合: 23年前
投稿: 14
 

>MyFile.Open( wcharFileNm, CFile::modeWrite )
これの引数を
MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeNoTrucate
| CFile::modeCreate )
に変更して、
while の前に、
MyFile.SeekToBegin();
を入れるとできると思いますよ。


返信引用
makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

高1さんのアドバイス通りにしてみましたが
やはり出力もされず
再度ファイルオープンするときにエラーがでてしまいました。


返信引用
高1
 高1
(@高1)
ゲスト
結合: 23年前
投稿: 14
 

すいません。ソースをきちんと読んでませんでした。m(__)m


返信引用
高1
 高1
(@高1)
ゲスト
結合: 23年前
投稿: 14
 

↑間違えて送信してしまいました。
最初はきちんと実行されて、思い通りに出力されているんですよね?


返信引用
makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

はじめにプログラムを実行したときに
ファイルをオープン、データを読み込み表示させています。
そしてデータを修正したりして
最終的に終了ボタンを押したときに書込みをしたいのです。

Tenken1_Mst.csvには表示のため
もともとデータが入っています。
1度書込みを実行しても、書き込まれていません。
プログラムは終了します。

そして再びプログラムを実行してみると
ファイルの中は変わっていないのですが
オープンできないというエラーがでてしまうのです。


返信引用
高1
 高1
(@高1)
ゲスト
結合: 23年前
投稿: 14
 

僕が見る限りでは、書き込む処理に問題はないと思いますよ。
(力不足かもしれないですけど...)

_CTenken とは何者ですか?

あと CString で書き込むならば CStdioFile を使用したほうが楽ですよ。


返信引用
makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

私もCStdioFileを使おうと思ったのですが
エラーがでて使えないのです。

wchar_t *wcharFileNm ;
//CFile MyFile ;
CStdioFile MyFile;
CString str;

wcharFileNm = TEXT(\\temp\\Test.csv) ;

if ((fp = MyFile.Open( wcharFileNm, CFile::modeWrite | CFile::modeNoTruncate |
CFile::modeCreate)) == NULL)
{
  // OPENエラー処理
  MessageBox(_T(FILE OPEN ERR), _T(ファイルオープン), MB_OK |        
  MB_ICONEXCLAMATION);
}else{

  str = abcedfg;
  MyFile.WriteString( str );
}
MyFile.Close();

例えばこのような処理でコンパイルしてみると
WriteStringで「error C2039: 'WriteString' : is not a member of 'CStdioFile'」
のようなエラーがでるのです。

Writeで実行してみてもTest.csvはできていませんでした。


返信引用
高1
 高1
(@高1)
ゲスト
結合: 23年前
投稿: 14
 

CStdioFile MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeNoTruncate
| CFile::modeCreate);

でも出来ませんか?


返信引用
makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

「Syntax error : missing ';' before '.'」
こんなエラーがでるのですが。

//CStdioFile MyFile;
この宣言を伏せてみたりもしたのですが。
同じエラーがでました。


返信引用
とりあえず
 とりあえず
(@とりあえず)
ゲスト
結合: 23年前
投稿: 5
 

書かれているエラーがみんな英語だぁ!
eMbedded VisualC++ って何?

とりあえず
CStdioFile MyFile( wcharFileNm, CFile::modeWrite
| CFile::modeNoTruncate
| CFile::modeCreate);
または
CStdioFile MyFile;
MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeNoTruncate
| CFile::modeCreate);
だと思うが
'WriteString' : is not a member of 'CStdioFile' は信じがたい。

CStdioFileの定義(.h)を確認してみては?


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

eMbedded VisualC++ は、CE版ですね。
CE版にはCStdioFile::WriteStringはありません。


返信引用
makoto
 makoto
(@makoto)
ゲスト
結合: 23年前
投稿: 50
Topic starter  

おはようございます。

WriteStringはCE版では使えないのですね。
しかし、WriteStringをWriteに変えてみても
書込みがうまくいきません。

他に何かおかしいところがあるのでしょうか?


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

CEについては詳しくないですが、
ファイルにUNICODEのバイナリをそのまま
書き込むのは問題あるような気がします。

以下のように、ASCIIで書き込むとどうなります?

CFile MyFile;
MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeCreate
| CFile::typeText);
MyFile.Write(1234, 4);
MyFile.Close();


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

返信する

投稿者名

投稿者メールアドレス

タイトル *

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