如何在c++中将二进制文件中的数据读取到向量?

问题描述 投票:0回答:1

我想将二进制文件读入向量。一切似乎都工作正常,因为所有值都有正确的值。

除了二进制值/数据未输入到

data
或者更确切地说
data
未填充。

void loadDataFromFile(const std::string& filePath, std::vector<DataArray>& data) 
{
    std::ifstream inFile(filePath, std::ios::binary);
    if (!inFile) {
        std::cerr << "Error opening file!" << std::endl;
    }
    
    // Get the size of the file
    inFile.seekg(0, std::ios::end);
    std::streamsize file_size = inFile.tellg();
    inFile.seekg(0, std::ios::beg);

    constexpr std::size_t bufferSize = 700 * 1024 * 1024; // 700 MB buffer size (adjust as needed)

    std::size_t elementSize = sizeof(DataArray);
    std::size_t elementsPerBuffer = bufferSize / elementSize;
    std::size_t totalElements = file_size / elementSize;

    data.reserve(totalElements);
    
    std::size_t offset = 0;
    while (offset < totalElements) {
        std::size_t count = std::min(elementsPerBuffer, totalElements - offset);

        inFile.read(reinterpret_cast<char*>(&data[offset]), count * elementSize);

        offset += count;
    }

    inFile.close();
}
c++ iostream ifstream
1个回答
0
投票

在这一行中:

data.reserve(totalElements);

您拨打

std::vector::reserve
将会:

增加向量的容量(向量的元素总数) 该向量可以在不需要重新分配的情况下保持为一个值 大于或等于 new_cap。

size
的实际
vector
不会改变,访问索引 >= 当前大小的元素将调用未定义行为。

相反,由于您想用

totalElements
元素填充向量,因此您应该调用:

data.resize(totalElements);
© www.soinside.com 2019 - 2024. All rights reserved.