ファイルの最後の行を消去する

[戻る]
kzs 2005/05/13(金) 09:49:48
ファイルの最終行を消去したいのですが、
やり方がわかりません。
おしえてください

kzs 2005/05/13(金) 10:07:03
このepptr()関数は利用できますか?

Blue 2005/05/13(金) 10:08:45
一度全て読み込んで、最後の行以外の内容を
上書きするのはどうでしょうか?

【以下処理例】
元のファイル(ファイルAとする)をオープン
一時ファイル(ファイルBとする)をオープン

下記の作業をファイルAの終わりまで繰り返す
・ファイルAを一行ずつ読み込む(1)
・最後の行でない場合、(1)の内容をファイルBに書き込む

ファイルBをクローズ
ファイルAをクローズ

ファイルAを削除
ファイルBの名前をファイルAの名前に変更

kzs 2005/05/13(金) 11:37:36
何故か上手くいきません。
何が原因かわかりません。


    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();

YuO [E-Mail] 2005/05/13(金) 11:40:44
FileListに同じポインタをぼこぼこ突っ込んでいるから問題が起きるのでは?
さらに,同じ場所に読み込んじゃっているし……。

char *なんか捨て去って,std::stringを使えば問題は無くなると思います。

kzs 2005/05/13(金) 11:54:46
YuOさん。
すみません。具体的にどこを直せばよいのでしょうか?
初心者なのでわかりません。

vector<std::string> FileList;
に直したら
in >> strBuff;
が利用できなくなりました。

お手数ですが教えてください

Blue 2005/05/13(金) 12:32:59
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

kzs 2005/05/13(金) 12:40:56
[[解決]]
Blue様
ありがとうございました。
無事に実行できました。

古いスレッドには追加発言できません。