-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

2

用完整的功能代码完成问题:(在 Visual Studio 2017 下测试)

BOOL ReadBinaryFile(TCHAR * filename) {

    CFileStatus filestatus;
    BOOL ok = CFile::GetStatus(filename, filestatus);
    if (!ok)
        return FALSE;

    CFile myFile;
    ok = myFile.Open(filename, CFile::modeRead | CFile::typeBinary | CFile::modeNoTruncate);
    if (!ok)
        return FALSE;

    INT_PTR SIZE = (INT_PTR) filestatus.m_size;

    // To read into a CByteArray, we need to allocate a buffer via CByteArray and get a pointer to said buffer that we can use for lpBuf:
    CByteArray buffer;
    buffer.SetSize(SIZE); // ensure that buffer is allocated and the size we want it
    UINT bytesRead = myFile.Read(buffer.GetData(), SIZE);

    myFile.Close();
    return TRUE;
}
于 2017-08-28T17:29:15.893 回答
1

查看 的文档CFile::Read,我们看到它需要两个参数:

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

lpBuf

指向用户提供的缓冲区的指针,该缓冲区将接收从文件中读取的数据。

nCount

要从文件中读取的最大字节数。对于文本模式文件,回车换行对被计为单个字符。

lpBuf不是类型CByteArray。它是void*。因此编译器错误。

要读入 a CByteArray,我们需要通过分配一个缓冲区CByteArray获取一个指向我们可以用于lpBuf的缓冲区的指针:

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 回答