C++ 和 C 文件 I/O

标签 c++ file io

C++ 文件 I/O 比 C 文件 I/O 更难。 那么在 C++ 中,为文件 I/O 创建一个新库是否有用?我是说 <fstream> 谁能告诉我 C++ 文件 I/O 有什么好处吗?

最佳答案

意见

我不知道有任何使用 C++ 流的实际项目。它们太慢且难以使用。有几个较新的库,如 FastFormatBoost声称更好的版本在上一期 ACCU Overload 杂志中有一篇关于它们的文章。就我个人而言,在过去 15 年左右的时间里,我一直在 C++ 中使用 c FILE 库,我认为没有理由改变。

速度

下面是一个小测试程序(我很快就拼凑起来了)来说明基本的速度问题:

#include <stdio.h>
#include <time.h>

#include<iostream>
#include<fstream>

using namespace std;

int main( int argc, const char* argv[] )
    {
    const int max = 1000000;
    const char* teststr = "example";

    int start = time(0);
    FILE* file = fopen( "example1", "w" );
    for( int i = 0; i < max; i++ )
        {
        fprintf( file, "%s:%d\n", teststr, i );
        }
    fclose( file );
    int end = time(0);

    printf( "C FILE: %ds\n", end-start );

    start = time(0);
    ofstream outdata;
    outdata.open("example2.dat");
    for( int i = 0; i < max; i++ )
        {
        outdata << teststr << ":" << i << endl;
        }
    outdata.close();
    end = time(0);

    printf( "C++ Streams: %ds\n", end-start );

    return 0;
    }

我电脑上的结果:

C FILE: 5s
C++ Streams: 260s

Process returned 0 (0x0)   execution time : 265.282 s
Press any key to continue.

正如我们所看到的,仅这个简单的示例就慢了 52 倍。我希望有办法让它更快!

注意: 在我的示例中将 endl 更改为 '\n' 改进了 C++ 流,使其仅比 FILE* 流慢 3 倍(感谢 jalf )可能有一些方法可以使其更快。

使用困难

我不能说 printf() 不简洁,但它更灵活 (IMO) 并且更容易理解,一旦您通过了宏代码的初始 WTF。

double pi = 3.14285714;
    
cout << "pi = " << setprecision(5)  << pi << '\n';
printf( "%.5f\n", pi );
    
cout << "pi = " << fixed << showpos << setprecision(3) << pi << '\n'; 
printf( "%+.3f\n", pi );
    
cout << "pi = " << scientific << noshowpos << pi<< '\n';
printf( "%e\n", pi );

问题

是的,可能需要更好的 C++ 库,可能是 FastFormat是那个图书馆,只有时间会证明一切。

戴夫

关于C++ 和 C 文件 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/605839/

相关文章:

python - C++ 的 SWIG,未找到符号 : Expected in: flat namespace

java - 使用 UTF-8 编码创建并写入文件

c# - 如何在 Windows 服务中连续读取文本文件

C,通过标记字符串填充二维数组

c++ - 将 C++ lambdas 存储为二进制数据

c++ - Cuda 原子和条件分支

c++ - 静态成员变量初始化

c - 错误的文件描述符 fileno

java - 调整图像文件的大小

c - 文件输出异常