2016-03-26 6 views
3

ファイルの内容をコピーしてから、同じファイルにstd :: ofstreamを作成してからstd :: ostream_iteratorを使ってstd :: copyを使用していますそのstd :: ofstreamをコピーした内容をファイルにコピーし直します。std :: copyは余分な改行文字をコピーしています

私の問題は、各元の行の間に新しい空白行が挿入されることです。ここで

は私のコードです:

std::string firstFile = getFileContents_asString("filepath.txt"); 
std::ofstream fileOutStream("filepath.txt"); 
std::ostream_iterator<char> oi(fileOutStream); 
std::copy(firstFile.begin(), firstFile.end(), oi); 

それはこのようにテキストをとります。

#include "worklogger_pres_model.h" 
#include "worklogmodel_container.h" 
#include <QSqlRelationalTableModel> 

そして、これを行います。デバッガで物事をチェックアウトするには

#include "worklogger_pres_model.h" 

#include "worklogmodel_container.h" 

#include <QSqlRelationalTableModel> 

を、A時最初のデバッグを実行すると、firstFile文字列にはmodel.h\r\n#includのようなストレッチがあります。

2回目のデバッグ実行時に、firstFile文字列にはmodel.h\r\r\n#includのようなストレッチがあります。

なぜ各キャリッジリターンオカレンスごとに余分な\ rまたはキャリッジリターンがファイルにコピーされるのですか?

役に立つと判明した場合は、getFileContents_asStringメソッドを次に示します。

std::string getFileContents_asString(const char * filename) { 
    std::ifstream f (filename, std::ios::in | std::ios::binary); 
    if (f) { 
     std::string buffer; 
     f.seekg(0, std::ios::end); 
     buffer.resize(f.tellg()); 
     f.seekg(0, std::ios::beg); 
     f.read(&buffer[0], buffer.size()); 
     f.close(); 
     return buffer; 
    } else { 
     std::cout << "file could not be opened"; 
     return std::string("failure to open file"); 
    } 
} 
+4

出力ファイルも「バイナリ」モードで開きます。 –

答えて

4

変更この:これに

std::ofstream fileOutStream("filepath.txt"); 

std::ofstream fileOutStream("filepath.txt", std::ios::in | std::ios::binary); 

あなたは、バイナリで入力ファイルを開くので、それはあまりにも出力ファイルの同じことを行うには意味をなさないと思います。


M.Mが言ったように:

を別のオプション(メモリバッファではなく\r\n\nが含まれる場合には)テキストとして両方のファイルを開くことです。

関連する問題