相关疑难解决方法(0)

cplusplus.com有什么问题?

对于这个问题,这可能不是一个非常合适的论坛,但是让我试一试,冒着被搬走的风险.

C++标准库有几个参考,包括非常有价值的ISO标准,MSDN,IBM,cppreferencecplusplus.就个人而言,在编写C++时,我需要一个具有快速随机访问,短加载时间和使用示例的引用,并且我一直在发现cplusplus.com非常有用.但是,我一直在SO上听到关于该网站的负面看法,所以我想具体说明:

cplusplus.com提供的错误,误解或错误建议有哪些?使用它来做出编码决策有哪些风险?

让我补充一点:我希望能够通过标准的准确报价在这里回答问题,因此我想发布可立即使用的链接,而cplusplus.com将是我选择的网站,如果不是这个问题.

c++

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

在C++中将整个文件读入std :: string的最佳方法是什么?

如何将文件读入a std::string,即一次读取整个文件?

文本或二进制模式应由调用者指定.该解决方案应符合标准,便携且高效.它不应该不必要地复制字符串的数据,它应该避免在读取字符串时重新分配内存.

实现此目的的一种方法是统计文件大小,调整大小std::stringfread()进入std::string's const_cast<char*>()' data().这要求std::string数据是连续的,这是标准不需要的,但似乎是所有已知实现的情况.更糟糕的是,如果在文本模式下读取文件,则其std::string大小可能与文件大小不同.

一个完全正确的,符合标准的和便携式解决方案,可以构建使用std::ifstreamrdbuf()进入std::ostringstream,并从那里进入std::string.但是,这可能会复制字符串数据和/或不必要地重新分配内存.所有相关的标准库实现是否足够智能以避免所有不必要的开销?还有另一种方法吗?我是否错过了一些已经提供所需功能的隐藏Boost功能?

请显示您的建议如何实施.

void slurp(std::string& data, bool is_binary)
Run Code Online (Sandbox Code Playgroud)

考虑到上面的讨论.

c++ string file-io

155
推荐指数
10
解决办法
6万
查看次数

如何在C++中获取文件大小?

让我们为这个问题创建一个补充问题.在C++中获取文件大小的最常用方法是什么?在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行),可靠,易于理解且没有库依赖(没有boost或qt,但是例如glib是可以的,因为它是可移植的库).

c++ filesize

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

如何使用C ++ 17获得以字节为单位的文件大小

我应该知道,特定操作系统是否存在陷阱?

有很多重复(12345这个问题),但他们在几十年前进行了解答。在许多这些问题中,投票率很高的答案今天是错误的。

.sx上其他(旧质量检查)的方法

  • stat.h(wrapper sprintstatf),使用syscall

  • tellg(),根据定义返回一个位置,不一定返回bytes。返回类型不是int

c++ filesize c++-standard-library c++17

93
推荐指数
2
解决办法
6026
查看次数

在C++中将文件内容读入字符串

可能重复:
在c ++中将文件粘贴到std :: string的最佳方法是什么?

在像Perl这样的脚本语言中,可以一次将文件读入变量.

    open(FILEHANDLE,$file);
    $content=<FILEHANDLE>;
Run Code Online (Sandbox Code Playgroud)

在C++中最有效的方法是什么?

c++ string file-io

76
推荐指数
4
解决办法
17万
查看次数

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

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

c++ fstream filesize istream

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

从输入迭代器创建C++ std :: string的性能

我正在做一些非常简单的事情:将整个文本文件从磁盘中抹去std::string.我目前的代码基本上是这样的:

std::ifstream f(filename);
return std::string(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>());
Run Code Online (Sandbox Code Playgroud)

它不太可能对程序产生任何性能影响,但我仍然很好奇这是否是一种缓慢的方式.

是否存在构造字符串将涉及大量重新分配的风险?在读取之前使用seekg()/ tellg()计算文件大小和reserve()字符串中的那么多空间会更好(也就是说更快)吗?

c++ string stream

9
推荐指数
1
解决办法
4889
查看次数

c ++只读取最后一行文本文件的最快方法?

我想只阅读文本文件的最后一行(我在UNIX上,可以使用Boost).我所知道的所有方法都需要扫描整个文件以获得最后一行,这根本没有效率.有没有一种有效的方法来获得最后一行?

此外,我需要它足够健壮,即使有问题的文本文件经常被另一个进程附加,它也能正常工作.

c++ iostream seek

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

如何确定std :: ofstream打开的文件的当前大小?

我有一个类型的文件流ofstream.构造函数以追加模式打开文件,所有消息总是写在文件末尾.

我需要写入一些固定大小的输出文件,例如1Mb,然后我需要关闭,重命名和压缩它,然后打开一个同名的新文件.

这需要在达到特定大小的文件时完成.

我尝试使用tellg()但是在网上阅读了东西(和这个)后,我明白这不是正确的方法.

由于我是C++的新手,我正在尝试找出最优化和正确的方法来获得准确的文件当前大小ofstream

class Logger {
    std::ofstream outputFile;
    int curr_size;
    Logger (const std::string logfile) : outputFile(FILENAME,
                                                     std::ios::app)
    {
        curr_size = 0;
    }
};
Run Code Online (Sandbox Code Playgroud)

在程序的某个地方,我正在写入数据:

    // ??? Determine the size of current file ???

    if (curr_size >= MAX_FILE_SIZE) {
        outputFile.close();
        //Code to rename and compress file
        // ...
        outputFile.open(FILENAME, std::ios::app);
        curr_size = 0;
    }

    outputFile << message << std::endl;
    outputFile.flush();
Run Code Online (Sandbox Code Playgroud)

c++ fstream ofstream

5
推荐指数
1
解决办法
836
查看次数

Fstream的tellg/seekg返回的价值高于预期

为什么这会失败,它应该是简单而有效的?

fisier.seekg(0, ios::end);
long lungime = fisier.tellg();
Run Code Online (Sandbox Code Playgroud)

这将返回一个比文件更大的值,从而导致错误

char *continut = new char[lungime];
Run Code Online (Sandbox Code Playgroud)

知道问题可能是什么?

我也尝试一次计数到文件的末尾一个char,它产生相同的结果,比预期的数字更高.但是一旦使用getline()一次读取一行,它就可以工作,没有多余的空格......

c++

3
推荐指数
1
解决办法
3206
查看次数

ifstream :: seekg给出了错误的结果

我正在玩ifstream来熟悉它.我试图使用seekg来告诉文件的位置,但它给了我错误的结果.

这个想法是:

  1. 打开文件
  2. 打印文件的位置
  3. 从文件中读取一个字符
  4. 打印文件的位置
  5. 从文件中读取一个字符
  6. 打印文件的位置
  7. 关闭文件.

原始文件看起来像这样(Windows格式):

file.txt的

aA
bB
cC
dD
eE
fF
Run Code Online (Sandbox Code Playgroud)

运行我的代码,我得到结果:

position: 0
got: a
position: 6
got: A
position: 7
Run Code Online (Sandbox Code Playgroud)

但是,对于此文件:

file.txt的

aAbBcCdDeEfF
Run Code Online (Sandbox Code Playgroud)

我得到了这些结果

position: 0
got: a
position: 1
got: A
position: 2
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码:

test.cpp(mingw/gcc5.3)

#include <fstream>
#include <iostream>

using namespace std;

static char s[10];

int main(int argc, char **argv)
{
    ifstream f("file.txt");    
    cout << "position: " << f.tellg() << "\n";
    f.read(s, 1);
    cout << "got: " << s << …
Run Code Online (Sandbox Code Playgroud)

c++ ifstream seekg

1
推荐指数
1
解决办法
452
查看次数