你只是得到第一個詞的原因是,這正是>>
運算符應用於字符串時的工作原理 - 它只是從跳過的任何流中獲取第一個以空格分隔的令牌領先的空白。
如果你想讀取文件的全部內容,您可以使用getline
功能是這樣的:
std::wifstream theFileHandle;
theFileHandle.open(theFile.Name());
std::wstringstream data;
for (std::wstring line; getline(theFileHandle, line);)
data << line << L"\n";
std::wstring theData = data.str();
這個循環,而更多的數據可以通過getline
訪問,因此,拉從所有數據文件。由於getline
跳過換行符,這種方法還增加了新行早在
編輯:正如@PigBen指出的那樣,有一個更清潔的方式做到這一點使用rdbuf()
:
std::wifstream theFileHandle;
theFileHandle.open(theFile.Name());
std::wstringstream data;
data << theFileHandle.rdbuf();
std::wstring theData = data.str();
這使用流插入操作符被重載以接收流緩衝區的事實。這種情況下的行爲是讀取流緩衝區的全部內容,直到所有數據都耗盡爲止,這正是您想要的行爲。
我可以保證``>>運營商實際上是在正常工作。的[閱讀整ASCII文件到C++的std :: string] – 2011-02-10 01:00:26
可能重複(http://stackoverflow.com/questions/2602013/read-whole-ascii-file-into-c-stdstring) – 2011-02-10 01:10:33
重新您的PS「需要數據要完美保存「,一個C++寬的流**可能不會做你認爲它的**。它將文件解釋爲窄字符(例如,在Windows中爲ANSI)併爲您提供相應的寬字符(例如,Unicode)。它可能在UTF-8編碼文件的* nix中工作,我不知道,但在Windows中,如果文件是Unicode,那麼你會得到垃圾。是的,這很愚蠢。是的,幾乎不可能爲該設計考慮任何合理的基本原理。不,這不是微軟的錯,它是C++ iostreams的設計。一個解決方法是讀取二進制數據,並翻譯自己。歡呼聲, – 2011-02-10 01:48:59