ファイルの最終行を消去したいのですが、
やり方がわかりません。
おしえてください
このepptr()関数は利用できますか?
一度全て読み込んで、最後の行以外の内容を
上書きするのはどうでしょうか?
【以下処理例】
元のファイル(ファイルAとする)をオープン
一時ファイル(ファイルBとする)をオープン
下記の作業をファイルAの終わりまで繰り返す
・ファイルAを一行ずつ読み込む(1)
・最後の行でない場合、(1)の内容をファイルBに書き込む
ファイルBをクローズ
ファイルAをクローズ
ファイルAを削除
ファイルBの名前をファイルAの名前に変更
何故か上手くいきません。
何が原因かわかりません。
CString LogPath = C:\\test.txt
vector<char*> FileList;
char buff[512];
ifstream in(LogPath);
if(!in) return false;
CString strBuff;
while(!in.eof()){
//in.getline(buff, sizeof(buff));
in >> buff;
FileList.push_back(buff);
}
in.close();
//
gfLog.open( LogPath , ios::out );
if(!gfLog){
cout << error<< endl;
return false;
}
// ファイル書き出し
for(int i =0; i < FileList.size() -1; i++ ){//最後行を除くので総数に-1
を引く
gfLog << FileList[i];
}
// ログファイルを閉じる
gfLog.close();
FileListに同じポインタをぼこぼこ突っ込んでいるから問題が起きるのでは?
さらに,同じ場所に読み込んじゃっているし……。
char *なんか捨て去って,std::stringを使えば問題は無くなると思います。
YuOさん。
すみません。具体的にどこを直せばよいのでしょうか?
初心者なのでわかりません。
vector<std::string> FileList;
に直したら
in >> strBuff;
が利用できなくなりました。
お手数ですが教えてください
std::getlineを調べてみてください。
というか、MFCでかけるなら全てMFCで書いたほうがいいと思うだけど。
以下MFCで適当にやってみたから参考にしてください。
ちなみにあんまりテストしてないです。
CString strFileName( a.txt );
TRY
{
CStringArray astrText;
CString strLine;
CStdioFile fInStream( strFileName, CFile::modeRead | CFile::typeText );
while ( fInStream.ReadString( strLine ) )
{
astrText.Add( strLine );
}
fInStream.Close();
CStdioFile fOutStream( strFileName, CFile::modeWrite | CFile::modeCreate |
CFile::typeText );
for ( int n = 0; n < astrText.GetSize() - 1; n++ )
{
fOutStream.WriteString( astrText.GetAt( n ) + \n );
}
fOutStream.Close();
}
CATCH ( CFileException, e )
{
// エラー処理
}
END_CATCH
Blue様
ありがとうございました。
無事に実行できました。