我在一个介绍文件的教程中(如何从\到文件读取和写入)
首先,这不是作业,这只是我正在寻求的一般帮助。
我知道如何一次阅读一个单词,但我不知道如何一次阅读一行或如何阅读整个文本文件。
如果我的文件包含1000个字怎么办?阅读每个单词都是不切实际的。
我的名为(Read)的文本文件包含以下内容:
我喜欢玩游戏 我喜欢阅读 我有2本书
这是我迄今为止所取得的成就:
#include <iostream>
#include <fstream>
using namespace std;
int main (){
ifstream inFile;
inFile.open("Read.txt");
inFile >>
有没有办法一次读取整个文件,而不是单独读取每一行或每个单词?
答案 0 :(得分:140)
您可以使用std::getline
:
#include <fstream>
#include <string>
int main()
{
std::ifstream file("Read.txt");
std::string str;
while (std::getline(file, str))
{
// Process str
}
}
另请注意,最好只使用构造函数中的文件名构造文件流而不是显式打开(同样关闭,只需让析构函数完成工作)。
有关std::string::getline()
的进一步文档,请参阅CPP Reference。
读取整个文本文件的最简单方法可能就是连接这些检索到的行。
std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
file_contents += str;
file_contents.push_back('\n');
}
答案 1 :(得分:19)
我知道这是一个非常老的线程,但我还想指出另一种实际上非常简单的方法......这是一些示例代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream file("filename.txt");
string content;
while(file >> content) {
cout << content << ' ';
}
return 0;
}
答案 2 :(得分:4)
我认为你可以使用istream .read()函数。您可以使用合理的块大小循环并直接读取到内存缓冲区,然后将其附加到某种任意内存容器(例如std :: vector)。我可以写一个例子,但我怀疑你想要一个完整的解决方案;如果您需要任何其他信息,请告诉我。
答案 3 :(得分:4)
嗯,要做到这一点,也可以使用C ++中提供的freopen函数 - http://www.cplusplus.com/reference/cstdio/freopen/并逐行读取文件 - :
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
freopen("path to file", "rb", stdin);
string line;
while(getline(cin, line))
cout << line << endl;
return 0;
}
答案 4 :(得分:1)
尚未提及的另一种方法是std::vector
。
std::vector<std::string> line;
while(file >> mystr)
{
line.push_back(mystr);
}
然后你可以简单地遍历矢量并修改/提取你需要的东西/
答案 5 :(得分:0)
您好,兄弟,这是一种使用此代码在确切的行中读取字符串的方法
希望这对您有帮助!
#include <iostream>
#include <fstream>
using namespace std;
int main (){
string text[1];
int lineno ;
ifstream file("text.txt");
cout << "tell me which line of the file you want : " ;
cin >> lineno ;
for (int i = 0; i < lineno ; i++)
{
getline(file , text[0]);
}
cout << "\nthis is the text in which line you want befor :: " << text[0] << endl ;
system("pause");
return 0;
}
祝你好运!
答案 6 :(得分:0)
您还可以使用它逐个读取文件中的所有行,然后打印i
#include <iostream>
#include <fstream>
using namespace std;
bool check_file_is_empty ( ifstream& file){
return file.peek() == EOF ;
}
int main (){
string text[256];
int lineno ;
ifstream file("text.txt");
int num = 0;
while (!check_file_is_empty(file))
{
getline(file , text[num]);
num++;
}
for (int i = 0; i < num ; i++)
{
cout << "\nthis is the text in " << "line " << i+1 << " :: " << text[i] << endl ;
}
system("pause");
return 0;
}
希望这可以帮助您:)
答案 7 :(得分:0)
以上解决方案都很棒,但还有一个更好的解决方案是“一次读取文件”:
fstream f(filename);
stringstream iss;
iss << f.rdbuf();
string entireFile = iss.str();
答案 8 :(得分:0)
以下代码段将帮助您阅读由 unicode 字符组成的文件
CString plainText="";
errno_t errCode = _tfopen_s(&fStream, FileLoc, _T("r, ccs=UNICODE"));
if (0 == errCode)
{
CStdioFile File(fStream);
CString Line;
while (File.ReadString(Line))
{
plainText += Line;
}
}
fflush(fStream);
fclose(fStream);
读完后一定要关闭文件指针,否则会报错