为什么从文件中获取输入时我的字符串为空?

Why is my string empty when taking input from file?

我有一个充满数字(20 亿)的巨大文件。所以这是一个文件拆分器,它将我的文件拆分为 100000 个数字的组。但这是返回充满空格和输入的空文件。我什至试图改变变量的数据类型。我很震惊。请提出建议。

    #include <iostream>
    #include <vector>
    #include <string>
    #include <iterator>
    #include <fstream>
    #include <algorithm>
    using namespace std;
    int main()
    {
        std::ifstream ifs("prime.txt");

        unsigned long long int curr;
        unsigned long long int x = 0;
        string li;
        int count;
        while (getline(ifs, li))
        {
            count ++;
        }
        ifs.seekg(ios::beg);
        string v;
        while (curr < count)
        {
            x++;
            std::string file = to_string(x) ;
            std::string filename = "splitted\"+file+ ".txt";
            std::ofstream ofile (filename.c_str());

            while (curr < 100000*x )
            {

                ifs >> v ;
                ofile << v << "\n";
                curr++;
            }
            ofile.close();
        }

    }

你有 2 个未初始化的变量,countcurr,你的编译器应该警告你这些。如果它不能确保您已启用编译器警告。

在初始 while 循环中的最后一个 getline 失败后,流将设置 faileof 标志。由于流不处于 good 状态,对其的所有进一步操作都将失败,因此您的 seekg 将被忽略,您的所有读取也将被忽略。要在 seekg.

之前修复此调用 ifs.clear();

因为你似乎不需要任何地方的行数,所以预先计算它是不必要的,因为你不是按行读取文件,如果你的文件在一个文件上有多个值,它将导致不正确的行为线。您的代码可以简化为:

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <fstream>
#include <algorithm>
using namespace std;
int main()
{
    std::ifstream ifs("prime.txt");
    if (!ifs)
    {
        std::cout << "error opening input file\n";
        return 1;
    }

    int64_t fileNumber = 0;
    int64_t fileCount = 0;
    std::ofstream ofile;
    while (ifs)
    {
        if (!ofile.is_open() || (fileCount >= 100000))
        {
            ofile.close();
            fileCount = 0;
            fileNumber++;
            std::string file = to_string(fileNumber);
            std::string filename = "splitted\" + file + ".txt";
            ofile.open(filename.c_str());
            if (!ofile)
            {
                std::cout << "error opening output file\n";
                return 1;
            }
        }
        std::string value;
        if (ifs >> value) {
            ofile << value << "\n";
            fileCount++;
        }
    }
}