-1

C ++のgetlineはいつ失敗しますか?

さまざまな理由で全体を貼り付けることができない大きなコードスニペットがあります。C ++のgetlineを使用して、存在し、データが含まれていることがわかっているファイルから読み取ろうとしています。しかし、getlineはエラー123を返すことに失敗します-無効な名前(getlasterrorの出力)。私はさらに困惑するエラーコードを調べました。

ファイルを開いているときにエラーチェックを行います。だから私はファイルへのハンドルを持っていると確信しています。コードを貼り付けないでください。私はC++、特にWindowsを初めて使用します。getlineに関する提案や洞察があれば役立ちます。コンパイラによってダンプされたファイルを読み込もうとしています。

これはコードからの抜粋です

ifstream inFile("C:\...\ash.txt",ios::in);

string singleLine;

getline(inFile,singleLine);

singleLineは空です!私は愚かなことをしています..plsは私にそれを指摘します!感謝します

重要な編集:

iOSメンバーを確認したところ、フェイルビットが設定されていることがわかりました。なぜフェイルビットが設定されるのですか?ファイルは存在します。また、Windowsがファイル拡張子をどのように公開するかによって問題が発生する可能性があるのではないかと考えていました。それは問題ではないようです。私は何が欠けていますか?

4

5 に答える 5

4

GetLastErrorWin32 API呼び出しについてのみ説明しますが、そうでstd::getlineはありません。

失敗したiostreamのメンバーを確認しrdstate()ます。

ios::exceptions(eofbit | failbit | badbit)前に呼び出しgetlineて結果の例外をキャッチすると、より説明的なエラーメッセージが表示される場合と表示されない場合があります。

于 2011-07-14T00:15:16.517 に答える
1

ビットが設定されている場合failは、ファイルを正常に開かなかった可能性があります。ifFile.is_open()trueを返すかどうかを確認します。そうでない場合は、ファイルが正しく開かれていないことを示している可能性があります。権限がないか、文字列を適切にエスケープする必要があるか、ファイルがロックされている可能性があります。

failまた、への呼び出しの前後の両方でが設定されているかどうかを確認する必要がありますgetline。以前の場合は、ファイルが開いていないことを意味している可能性があります。後の場合は、ファイルが空であることを意味している可能性があります。

Windowsが本当のファイル拡張子をあなたから隠している場合があります。ash.txt.txtたとえば、ファイル拡張子を非表示にするようにExplorerを構成している場合、ファイル名は実際には名前が付けられている可能性があります。ファイルが開いていない場合は、調査する価値があるかもしれません。

于 2011-07-14T00:45:52.333 に答える
0

ファイルパスの円記号をエスケープする必要がありますか?

于 2011-07-14T00:22:39.450 に答える
0

ファイルを開くことができませんでした。

これは、正しいパスを指定しなかったためです。

これは、パス区切り文字として\の古いウィンドウ規則を使用したためです。
これは、Cのエスケープ文字でもあります。

'/'を使用するとエラーが発生しやすいため、Windowsでは/をパス区切り文字として使用できます(10年以上使用しています)。

パスは次のようになります。

ifstream inFile("C:\\...\\ash.txt");

// Or my preference

ifstream inFile("C:/.../ash.txt");

または、ブーストを使用することをお勧めします。

于 2011-07-14T08:26:34.353 に答える
-1

Getline IIRCはc_stringsを対象としており、文字列は最初の引数であり、2番目の引数ではありません。

http://www.cplusplus.com/reference/iostream/istream/getline/

通常の文字列を使用しようとしていますが、これは(間違っている可能性がありますが)getlineでは機能しません。

于 2011-07-14T00:20:03.573 に答える