C++ C++;-std::fstream read()不读取完整文件
我想创建一个MIDI解释器用于更大的项目,但我目前面临一个巨大的问题:似乎在某些情况下,我的文件没有被完全读取,因此我没有我需要的全部数据。。。例如,我有一个大约30000字节长的文件,而fstream::read()函数只读取其中大约3000字节 我的代码如下,如果有人有想法 我没有发现任何类似的问题,但如果有,请告诉我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
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感谢这些信息,它可能会派上用场