1

OFF ファイルを読み取るクラスをコーディングしていますが、次の問題が発生しています。

Code::Blocks 環境内でコンパイルすると、すべて正常に動作します。ロードするファイルの最初の行が「OFF」と異なる場合、2 番目の if ステートメントにジャンプしてプログラムを終了します...

ただし、cygwin で g++ を使用してコンパイルすると、ファイルに実際に何が書き込まれているかに関係なく、プログラムは 2 番目の if-Statement にジャンプします。助言がありますか?

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

polyeder offManager::readOFF(std::string filename)
{
    //Open File
    std::ifstream file(filename.c_str());

// If file couldn't be opened
if( !file.is_open() )
{
    std::cerr << "ERROR: Konnte Datei \""
    << filename << "\" nicht oeffnen!"
    << std::endl;
    exit (2);
}


// Test if the file really is an OFF File
std::string line;
std::string off ("OFF");
getline( file, line );
if ( line.compare(off) != 0 )
{
    std::cerr << "ERROR: Datei \""
    << filename << "\" ist nicht im OFF Format!"
    << std::endl;
    file.close();
    exit (2);
}
...
}

cygwin で g++ -v と入力すると、次のようになります。 Blablabla Thread-Model: posix gcc-Version 4.5.3 (GCC)

Code::Blocks はこのバージョンを使用します: スレッド モデル: win32 gcc バージョン 4.4.1 (TDM-2 mingw32)

4

1 に答える 1

0

開いているファイルは DOS テキスト形式である可能性が高いため、行\r\n\n.

Cygwin FAQ には、この問題に関するエントリがあります。mainコードを単純なドライバーにコピーし、 2 つの方法でコンパイルしました。まず、通常の方法:

$ g++ s.cc
$ ./a.exe test
ERROR: Datei "test" ist nicht im OFF Format!

次に、提案された修正 (テキスト翻訳モードで開き、バイナリ モードで書き込む) を使用します。

$ g++ s.cc /usr/lib/automode.o 
$ ./a.exe test
于 2012-07-14T17:09:53.720 に答える