Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-std::fstream read()不读取完整文件_C++_Fstream - Fatal编程技术网

C++ C++;-std::fstream read()不读取完整文件

C++ C++;-std::fstream read()不读取完整文件,c++,fstream,C++,Fstream,我想创建一个MIDI解释器用于更大的项目,但我目前面临一个巨大的问题:似乎在某些情况下,我的文件没有被完全读取,因此我没有我需要的全部数据。。。例如,我有一个大约30000字节长的文件,而fstream::read()函数只读取其中大约3000字节 我的代码如下,如果有人有想法 我没有发现任何类似的问题,但如果有,请告诉我 std::ifstream file; file.open("Songs/" + filename + ".mid"); if (!file.is_o

我想创建一个MIDI解释器用于更大的项目,但我目前面临一个巨大的问题:似乎在某些情况下,我的文件没有被完全读取,因此我没有我需要的全部数据。。。例如,我有一个大约30000字节长的文件,而fstream::read()函数只读取其中大约3000字节

我的代码如下,如果有人有想法

我没有发现任何类似的问题,但如果有,请告诉我

    std::ifstream file;
    file.open("Songs/" + filename + ".mid");
    if (!file.is_open())
    {
        std::cerr << "Failed to open file" << std::endl;
        return;
    }
    std::vector<unsigned char> fileData;

    while (file.read((char *)&c, 1))
    {
        fileData.push_back(c);
    }
    file.close();
std::ifstream文件;
打开(“歌曲/”+filename+“.mid”);
如果(!file.is_open())
{

默认情况下,文件流使用“输入+输出”模式打开文本文件的文件流。请尝试将“输入”(从文件中读取)和“二进制”(文件不是纯文本)精确组合,如下所示:

std::ifstream file;
file.open("Songs/" + filename + ".mid", std::ios_base::in | std::ios_base::binary);
if (!file.is_open())
{
    std::cerr << "Failed to open file" << std::endl;
    return;
}
std::vector<unsigned char> fileData;

while (file.read((char *)&c, 1))
{
    fileData.push_back(c);
}
file.close();
std::ifstream文件;
打开(“歌曲/”+filename+“.mid”,std::ios_base::in | std::ios_base::binary);
如果(!file.is_open())
{

std::cerr尝试以二进制模式打开文件
file.open(“Songs/”+filename+“.mid”,ios::binary)
程序是如何失败的?是
while
循环提前退出?还是整个过程都崩溃了?@NathanOliver它成功了!谢谢!@Spencer似乎while循环提前退出,因为程序稍后会崩溃。使用std::fstream::binary选项成功了,谢谢!@BenoitTachet,为了安全起见,最好完全指定您的intent-不要低估此位掩码处的其他位。在使用
std::ifstream
时,您不需要显式指定
std::ios_base::in
,它始终为您启用。
std::ifstream
从不使用
std::ios_base::out
,但
std::fstream
std::ofstream
do。
std::ifstream
只像一个输入
std::fstream
,而
std::ofstream
只像一个输出
std::fstream
@RemyLebeau感谢这些信息,它可能会派上用场