2012-02-03 14 views
1

これは私がテキストファイルで経験している奇妙なクロスプラットフォームのものです。私は非常に単純にテキストファイルを読み込むプログラムWindowsとLinuxのテキストファイルの処理に関する問題

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    while (myfile.good()) 
    { 
     getline (myfile,line); 
     if (line == "BEGIN") 
     cout << line << endl; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

を持っていると言うので、これはテキストファイルを読み込み、それはBEGIN遭遇した場合、それは読んでいるラインを出してくれる。ここで私が読んでいるテキストファイルです。それは1時間に遭遇しているので

HEADER 
BEGIN 
X 2 
Y 2 
Z 1 
END 

Windowsが成功し、1時間をBEGIN出してくれる。 Linuxは何も吐き出さない。私がここで欠けている根本的なものがありますか?

+0

LF(Unix)の代わりにCRLF(Windows)行の末尾を使用していますか?(Windowsの行末を使用している場合、プログラムはキャリッジリターンを処理する必要があります。 ? CRLFを使用している場合は、おそらくその行の一部としてCRを読み込んでいる可能性があります。 –

答えて

7

ファイルは、Windowsの行末、その後、line"BEGIN\r"ではなく、Linux上"BEGIN"になります(つまり、すべての行は、Linuxが期待するようちょうど改行ではなく、キャリッジリターン+ラインフィードで終わる、である)を持っている場合。

これを修正するには、Linux行末に変換したファイルにdos2unixを実行することができます:

dos2unix example.txt 

を別の方法として、あなたは両方のシステムで同じになるようにファイルをしたい場合は、あなたがそれを開くことができます

ifstream myfile ("example.txt", ios_base::binary); 

となり、両方のシステムで同じ方法でファイルが読み込まれます。

+0

ああ、ありがとう! –

+0

@VincentRusso:ようこそ! – ruakh

関連する問題