-1

私は CByteArray をファイルに書き込んでいます:

    CFile myFile;
CByteArray m_baToques;

    if(myFile.Open(_T(file), CFile::modeReadWrite | CFile::modeCreate))
    {
        myFile.Write(m_baToques.GetData(),m_baToques.GetSize());
        myFile.Write(m_baDst.GetData(), m_baDst.GetSize());
        myFile.Write(m_baFeriados.GetData(), m_baFeriados.GetSize());
    }

ファイルからCByteArrayを読み取る方法は?

私は試します:

    CFile myFile;    
    if(myFile.Open(_T(file), CFile::modeReadWrite | CFile::modeCreate))
    {
        myFile.Read(m_baToques,m_baToques.GetSize());
        myFile.Read(m_baDst, m_baDst.GetSize());
        myFile.Read(m_baFeriados, m_baFeriados.GetSize());
    }

エラー C2664: 'CFile::Read': パラメーター 1 を 'CByteArray' から 'void *' に変換できません

4

2 に答える 2

1

ドキュメントCFile::Readを見ると、次の 2 つのパラメーターが必要であることがわかります。

virtual UINT CFile::Read(void* lpBuf, UINT nCount);

lpBuf

ファイルから読み取られたデータを受け取るユーザー提供のバッファーへのポインター。

nCount

ファイルから読み取る最大バイト数。テキスト モード ファイルの場合、キャリッジ リターンとラインフィードのペアは 1 文字としてカウントされます。

lpBufはタイプではありませんCByteArray。ですvoid*。したがって、コンパイラエラー。

に読み込むには、 を介してバッファーを割り当て、lpBufに使用できるバッファーへのポインターを取得する必要CByteArrayがあります。CByteArray

CByteArray buffer;
buffer.SetSize(1024); // ensure that buffer is allocated and the size we want it
UINT bytesRead = myFile.Read(buffer.GetData(), buffer.GetSize());
// use bytesRead value and data now in buffer as needed

あなたの質問では、読み取りパスに次の行があることに注意してください。

if(myFile.Open(_T(file), CFile::modeReadWrite | CFile::modeCreate))

これCFile::modeCreateにより、ファイルが 0 バイトに切り詰められます。読むものはないでしょう。

もっとこういうの書きたかったの?

if(myFile.Open(_T(file), CFile::modeRead | CFile::typeBinary | CFile::modeNoTruncate))
于 2013-11-30T10:41:08.160 に答える