-1

これは私がこれまでに試したことです。ベクトルはまったく取り込まれていません:

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>

int main()
{
    std::ifstream file("E:\\test3.wav", std::ios::binary );

    if( file.fail() )
    {
        std::cout << "File does not exist or could not open file";
    }
    else
    {
        std::vector<short> buffer;

        //read
        std::copy(
                    std::istream_iterator<short>( file ),
                    std::istream_iterator<short>(),
                    std::back_inserter( buffer )
                    );

        //size outputs to 0
        std::cout << buffer.size();
    }

    return 0;
}

ただし、次のコードは句read()内で使用すると問題なく機能します。else

std::vector<short> buffer( 56 );

    //read
    file.read( (char *) &buffer[0], 56 );

    //outputs the whole file with all expected values showing.
    std::copy( 
                 buffer.begin(), 
                 buffer.end(), 
                 std::ostream_iterator< short >( std::cout, " " )
             );

std::copy()コードの最初のブロックに示されているように、ベクトルを設定するために欠けているものはありますか?

4

1 に答える 1

3

istream_iterator;operator >>でオーバーロードを使用して読み取ります。istreamこれはフォーマットされた入力を行いますが、この例では:

std::vector<short> buffer( 56 );

//read
file.read( (char *) &buffer[0], 56 );

あなたは生のバイトを読んでいます。(そして、あなたは56short秒を入力していません、あなたはsを入力しています56/sizeof(short) short。)

で幸せになるようですistreambuf_iterator

于 2012-12-01T23:51:24.563 に答える