| 제목 | [MFC] CFileFind 를 이용하여 여러 DAT 파일을 읽어오고 Byte로 저장하는데 액세스 위반이 발생하였습니다. | ||
|---|---|---|---|
| 카테고리 | 기타 | ||
| 글쓴이 | AlwaysBeginner | 작성시각 | 2022/04/19 11:46:24 |
|
|
|||
|
언어는 MFC 이고 Visual Studio로 작업하였습니다. 작성한 코드는 특정경로에 있는 DAT 파일을 CFileFind로 불러와 해당 각 배열에 Byte로 저장하는 코드입니다. 여기서 각 배열은 구조체로 선언되었고 배열의 크기는 파일의 용량이 변함에 따라 동적으로 할당하고 있습니다.
void CMultiDATToByteDlg::LoadDATFile()
{
CFileFind fileFinder;
BOOL bFind = fileFinder.FindFile(m_strRelayFilePath + "\\ToIDS" + "\\*.dat*");
int nFileCount = 0;
while (bFind)
{
bFind = fileFinder.FindNextFile();
if (fileFinder.IsDots())
continue;
nFileCount++;
CStdioFile DATFile;
CString DATFile_Name = fileFinder.GetFileTitle();
int DATFile_Length = fileFinder.GetLength();
byte* DATFile_Data = (byte*)malloc(sizeof(byte)* DATFile_Length);
if (DATFile.Open(fileFinder.GetFilePath(), CFile::modeRead))
{
DATFile.Read(DATFile_Data, DATFile_Length);
DATFile.Close();
int nListIndex = 0;
while (true)
{
POSITION pos = m_DATFileList.FindIndex(nListIndex);
if (m_DATFileList.GetCount() == 0 || pos == NULL)
{
DATFileObject *pDATFileObject = new DATFileObject;
pDATFileObject->m_DATFile_Name = DATFile_Name;
pDATFileObject->m_DATFile_Length = DATFile_Length;
pDATFileObject->m_DATFile_Data = (byte*)malloc(sizeof(byte)* pDATFileObject->m_DATFile_Length);
memcpy(pDATFileObject->m_DATFile_Data, DATFile_Data, pDATFileObject->m_DATFile_Length);
m_DATFileList.AddTail(pDATFileObject);
DataObject* pDataObject = new DataObject;
pDataObject->m_strIP = pDATFileObject->m_DATFile_Name;
m_DataObjectList.AddTail(pDataObject);
break;
}
else
{
DATFileObject* pDATFileObject = (DATFileObject*)m_DATFileList.GetAt(pos);
if (DATFile_Name == pDATFileObject->m_DATFile_Name)
{
pDATFileObject->m_DATFile_Length = DATFile_Length;
free(pDATFileObject->m_DATFile_Data);
pDATFileObject->m_DATFile_Data = (byte*)malloc(sizeof(byte)* pDATFileObject->m_DATFile_Length);
memcpy(pDATFileObject->m_DATFile_Data, DATFile_Data, pDATFileObject->m_DATFile_Length);
m_DATFileList.SetAt(pos, pDATFileObject);
break;
}
else nListIndex++;
}
}
}
free(DATFile_Data);
}
fileFinder.Close();
DATFileToData();
}
void CMultiDATToByteDlg::DATFileToData()
{
DATFileObject* pDATFileObject = NULL;
DataObject* pDataObject = NULL;
POSITION pos = m_DATFileList.GetHeadPosition();
while (pos != NULL)
{
pDATFileObject = (DATFileObject*)m_DATFileList.GetNext(pos);
for (int nIndex = 0; nIndex < m_DataObjectList.GetCount(); nIndex++)
{
pDataObject = (DataObject*)m_DataObjectList.GetAt(m_DataObjectList.FindIndex(nIndex));
if (pDATFileObject->m_DATFile_Name == pDataObject->m_strIP)
break;
}
pDataObject->m_Data = (byte*)malloc(sizeof(byte)* pDATFileObject->m_DATFile_Length);
memcpy(pDataObject->m_Data, pDATFileObject->m_DATFile_Data, pDATFileObject->m_DATFile_Length);
m_DataObjectList.SetAt(pos, pDataObject); } } 위와 같이 작성하고 실행하였으나 CopyUpLargeMov: bt __favor, __FAVOR_ENFSTRG ; check if Enhanced Fast Strings is supported jnc CopyUpSSE2Check ; if not, check for SSE2 support rep movsb mov eax,[esp + 0Ch] ; return original destination pointer pop esi pop edi M_EXIT 액세스 위반 문구가 나옵니다... 혹시 조언 좀 구할 수 있을까요? |
|||
| 다음글 | 페이지 로드시 에러 메세지 입니다 (1) | ||
| 이전글 | Error: CCI, -20016, Cannot con... (4) | ||
|
변종원(웅파)
/
2022/04/22 15:52:26 /
추천
0
|
codeigniter(php framework)에 대한 포럼이고 기타 개발이라도 php일반, 서버 등에 대해 답변을 합니다.
윈도우 프로그램 질문은 해결해주실 만한 분이 없을 겁니다.