Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从CFile读取CByteArray_C++_File Io_Mfc_Cfile - Fatal编程技术网

C++ 从CFile读取CByteArray

C++ 从CFile读取CByteArray,c++,file-io,mfc,cfile,C++,File Io,Mfc,Cfile,我正在将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_baD

我正在将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*'

查看,我们看到它需要两个参数:

virtualuintcfile::Read(void*lpBuf,uintncount)

lpBuf

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

计算

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

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

要读入
CByteArray
,我们需要和可以用于lpBuf的:

请注意,在您的问题中,在读取路径上有以下行:

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

将导致文件被截断为0字节。没有什么可看的了

你是不是想写点像这样的东西

if(myFile.Open(_T(file), CFile::modeRead | CFile::typeBinary | CFile::modeNoTruncate))

要使用完整的功能代码完成问题,请执行以下操作: (在Visual studio 2017下测试)

BOOL ReadBinaryFile(TCHAR*文件名){
CFileStatus文件状态;
BOOL ok=CFile::GetStatus(文件名,filestatus);
如果(!ok)
返回FALSE;
cfilemyfile;
ok=myFile.Open(文件名,CFile::modeRead | CFile::typeBinary | CFile::modeNoTruncate);
如果(!ok)
返回FALSE;
INT_PTR SIZE=(INT_PTR)filestatus.m_SIZE;
//要读入CByteArray,我们需要通过CByteArray分配一个缓冲区,并获取一个指向所述缓冲区的指针,该缓冲区可用于lpBuf:
cbyte数组缓冲区;
SetSize(SIZE);//确保已分配缓冲区以及所需的大小
UINT bytesRead=myFile.Read(buffer.GetData(),SIZE);
myFile.Close();
返回TRUE;
}

如果您的代码不起作用,您应该添加原因。它做什么,不做什么?它编译吗?它跑吗?
if(myFile.Open(_T(file), CFile::modeRead | CFile::typeBinary | CFile::modeNoTruncate))