-1

C ++を使用してファイルからいくつかの整数を抽出したいのですが、正しく実行しているかどうかわかりません。

VB6の私のコードは次のとおりです。

Redim iInts(240) As Integer
Open "m:\dev\voice.raw" For Binary As #iFileNr
Get #iReadFile, 600, iInts() 'Read from position 600 and read 240 bytes

私のC++への変換は次のとおりです。

vector<int>iInts
iInts.resize(240)

FILE* m_infile;
string filename="m://dev//voice.raw";

if (GetFileAttributes(filename.c_str())==INVALID_FILE_ATTRIBUTES)
{
  printf("wav file not found");
  DebugBreak();
} 
else 
{
  m_infile = fopen(filename.c_str(),"rb");
}

しかし、今はそこから続ける方法がわかりません。また、「rb」が正しいかどうかもわかりません。

4

2 に答える 2

1

VBがファイルを読み取る方法はわかりませんが、ファイルから整数を読み取る必要がある場合は、次のことを試してください。

m_infile = fopen(myFile, "rb")
fseek(m_infile, 600 * sizeof(int), SEEK_SET);
// Read the ints, perhaps using fread(...)
fclose(myFile);

または、 ifstreamを使用してC++の方法を使用できます。

ストリームを使用した完全な例(エラーチェックを追加する必要があることに注意してください):

#include <ifstream>

void appendInts(const std::string& filename, 
                unsigned int byteOffset, 
                unsigned int intCount,
                const vector<int>& output)
{
    std::ifstream ifs(filename, std::ios::base::in | std::ios::base::binary);
    ifs.seekg(byteOffset);
    for (unsigned int i = 0; i < intCount; ++i)
    {
        int i;
        ifs >> i;
        output.push_back(i);
    }
}

...

std::vector<int> loadedInts;
appendInts("myfile", 600, 60, loadedInts);
于 2013-01-06T19:35:55.933 に答える
0

ベクトルの代わりに整数配列を使用し、pothファイル記述子と配列ポインタを渡して以下のように機能read() します

...
int my_integers[240];
read(m_infile, my_integers, 240, 600);
..

詳細については、 http://pubs.opengroup.org/onlinepubs/009695399/functions/read.htmlread()を参照してください。

于 2013-01-06T19:50:07.210 に答える