标签: fstream

mmap()与阅读块

我正在开发一个程序,该程序将处理可能大小为100GB或更大的文件.这些文件包含一组可变长度记录.我已经启动并运行了第一个实现,现在我正在寻求提高性能,特别是在输入文件被多次扫描时更有效地进行I/O.

mmap()通过C++的fstream库使用和读取块有经验吗?我想做的是从磁盘读取大块到缓冲区,从缓冲区处理完整记录,然后阅读更多.

mmap()代码可能会变得非常凌乱,因为mmap"d块需要躺在页大小的边界(我的理解)和记录可能潜在般划过页面边界.使用fstreams,我可以寻找记录的开头并再次开始阅读,因为我们不仅限于阅读位于页面大小边界的块.

如何在不实际编写完整实现的情况下决定这两个选项?任何经验法则(例如,mmap()快2倍)或简单测试?

c++ file-io fstream mmap

172
推荐指数
6
解决办法
7万
查看次数

C++:变量'std :: ifstream ifs'具有初始值但不完整的类型

对不起,如果这是非常noobish,但我是C++的新手.我正在尝试打开一个文件并使用ifstream以下方法阅读:

vector<string> load_f(string file) {
  vector<string> text;

  ifstream ifs(file);
  string buffer, str_line;

  int brackets = 0;
  str_line = "";

  while ( getline(ifs, buffer) ) {
    buffer = Trim( buffer );
    size_t s = buffer.find_first_of("()");

    if (s == string::npos) str_line += "" + buffer;
    else {
      while ( s != string::npos ) {
        str_line += "" + buffer.substr(0, s + 1);
        brackets += (buffer[s] == '(' ? 1 : -1);

        if ( brackets == 0 ) {
          text.push_back( str_line …
Run Code Online (Sandbox Code Playgroud)

c++ fstream return-type

126
推荐指数
1
解决办法
12万
查看次数

从文本文件中读取,直到EOF重复最后一行

以下C++代码使用ifstream对象从文本文件(每行有一个数字)读取整数,直到它达到EOF.为什么它读取最后一行的整数两次?如何解决这个问题?

码:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream iFile("input.txt");    // input.txt has integers, one per line

    while (!iFile.eof())
    {
        int x;
        iFile >> x;
        cerr << x << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

input.txt:

10  
20  
30
Run Code Online (Sandbox Code Playgroud)

输出:

10  
20  
30  
30
Run Code Online (Sandbox Code Playgroud)

注意:我已跳过所有错误检查代码,以使代码段保持较小.在Windows(Visual C++),cygwin(gcc)和Linux(gcc)上可以看到上述行为.

c++ fstream iostream

117
推荐指数
5
解决办法
27万
查看次数

如何从POSIX文件描述符构造c ++ fstream?

我基本上是在寻找fdopen()的C++版本.我对此做了一些研究,这似乎应该是容易的事情之一,但事实证明是非常复杂的.我是否遗漏了这种信念(即它真的很容易)?如果没有,是否有一个好的图书馆在那里处理这个?

编辑:将我的示例解决方案移到单独的答案.

c++ posix fstream file-descriptor

88
推荐指数
5
解决办法
5万
查看次数

如何一次读取一行或整个文本文件?

我在一个介绍文件的教程中(如何从\到文件读取和写入)

首先,这不是一个功课,这只是我正在寻求的一般帮助.

我知道如何一次读一个单词,但我不知道如何一次读一行或如何读取整个文本文件.

如果我的文件包含1000个单词怎么办?阅读每个单词是不切实际的.

我的名为(Read)的文本文件包含以下内容:

我喜欢玩我喜欢阅读的游戏我有2本书

这是我迄今为止所取得的成就:

#include <iostream>
#include <fstream>

using namespace std;
int main (){

  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>
Run Code Online (Sandbox Code Playgroud)

有没有办法一次读取整个文件,而不是分别读取每一行或每个单词?

c++ fstream iostream file-handling

78
推荐指数
5
解决办法
36万
查看次数

使用C++文件流(fstream),如何确定文件的大小?

我确定我在手册中错过了这个,但是如何使用标题中的C++ istream类来确定文件的大小(以字节为单位)fstream

c++ fstream filesize istream

74
推荐指数
5
解决办法
14万
查看次数

如何检查文件是否存在并且在C++中是否可读?

我有一个fstream my_file("test.txt"),但我不知道test.txt是否存在.如果它存在,我想知道我是否也可以阅读它.怎么做?

我用的是Linux.

c++ linux fstream file exists

63
推荐指数
6
解决办法
8万
查看次数

我需要关闭std :: fstream吗?

可能重复:
我是否需要手动关闭ifstream?

我是否需要调用fstream.close()或是fstream一个正确的RAII对象,在销毁时关闭流?

std::ofstream在方法中有一个本地对象.我可以假设退出此方法后文件总是关闭而不调用close吗?我找不到析构函数的文档.

c++ fstream std ofstream

59
推荐指数
2
解决办法
3万
查看次数

C++ Filehandling:ios:app和ios之间的区别:吃了吗?

写入文件ios::ateios:app写入文件时有什么区别.
在我看来,ios::app你可以在文件中移动,而ios::ate只能在文件的末尾读/写.它是否正确?

c++ fstream file c++-standard-library

56
推荐指数
4
解决办法
7万
查看次数

std :: fstream缓冲与手动缓冲(为什么10倍增益与手动缓冲)?

我测试了两种写入配置:

1)Fstream缓冲:

// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream;
stream.rdbuf()->pubsetbuf(buffer, length);
stream.open("test.dat", std::ios::binary | std::ios::trunc)

// To write I use :
stream.write(reinterpret_cast<char*>(&x), sizeof(x));
Run Code Online (Sandbox Code Playgroud)

2)手动缓冲:

// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream("test.dat", std::ios::binary | std::ios::trunc);

// Then I put manually the data in the buffer

// To write I use :
stream.write(buffer, length);
Run Code Online (Sandbox Code Playgroud)

我期待同样的结果......

但是我的手动缓冲可以将性能提高10倍来写入100MB的文件,并且与正常情况相比,fstream缓冲不会改变任何东西(不重新定义缓冲区).

有人对这种情况有解释吗?

编辑:这是新闻:刚刚在超级计算机上完成的基准测试(Linux 64位架构,持续英特尔至强8核,Lustre文件系统和...希望配置良好的编译器) 基准 (我没有解释1kB手动缓冲器"共振"的原因......)

编辑2:在1024 B的共振(如果有人对此有所了解,我很感兴趣): 在此输入图像描述

c++ buffer fstream file c++11

55
推荐指数
2
解决办法
2万
查看次数