こんにちは。
皆様にはいつもお世話になっています。
今回はファイルの出力がうまくいかないので
質問させていただきます。
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();
すみません!
間違えてしまいました。続きです。
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++
>MyFile.Open( wcharFileNm, CFile::modeWrite )
これの引数を
MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeNoTrucate
| CFile::modeCreate )
に変更して、
while の前に、
MyFile.SeekToBegin();
を入れるとできると思いますよ。
高1さんのアドバイス通りにしてみましたが
やはり出力もされず
再度ファイルオープンするときにエラーがでてしまいました。
すいません。ソースをきちんと読んでませんでした。m(__)m
↑間違えて送信してしまいました。
最初はきちんと実行されて、思い通りに出力されているんですよね?
はじめにプログラムを実行したときに
ファイルをオープン、データを読み込み表示させています。
そしてデータを修正したりして
最終的に終了ボタンを押したときに書込みをしたいのです。
Tenken1_Mst.csvには表示のため
もともとデータが入っています。
1度書込みを実行しても、書き込まれていません。
プログラムは終了します。
そして再びプログラムを実行してみると
ファイルの中は変わっていないのですが
オープンできないというエラーがでてしまうのです。
僕が見る限りでは、書き込む処理に問題はないと思いますよ。
(力不足かもしれないですけど...)
_CTenken とは何者ですか?
あと CString で書き込むならば CStdioFile を使用したほうが楽ですよ。
私も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はできていませんでした。
CStdioFile MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeNoTruncate
| CFile::modeCreate);
でも出来ませんか?
「Syntax error : missing ';' before '.'」
こんなエラーがでるのですが。
//CStdioFile MyFile;
この宣言を伏せてみたりもしたのですが。
同じエラーがでました。
書かれているエラーがみんな英語だぁ!
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)を確認してみては?
eMbedded VisualC++ は、CE版ですね。
CE版にはCStdioFile::WriteStringはありません。
おはようございます。
WriteStringはCE版では使えないのですね。
しかし、WriteStringをWriteに変えてみても
書込みがうまくいきません。
他に何かおかしいところがあるのでしょうか?
CEについては詳しくないですが、
ファイルにUNICODEのバイナリをそのまま
書き込むのは問題あるような気がします。
以下のように、ASCIIで書き込むとどうなります?
CFile MyFile;
MyFile.Open( wcharFileNm, CFile::modeWrite
| CFile::modeCreate
| CFile::typeText);
MyFile.Write(1234, 4);
MyFile.Close();