Имеются две функции m_File объявлен как
| Код | BOOL CDataSocket::PrepareReceiveFile(LPCTSTR lpszFilename) { // close file if it's already open if (m_File.m_hFile != NULL) { m_File.Close(); }
// open destination file if (!m_File.Open(lpszFilename, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate | CFile::shareDenyWrite)) { return FALSE; } m_nTotalBytesReceive = 0; m_nTotalBytesTransfered = 0; return TRUE; }
BOOL CDataSocket::PrepareSendFile(LPCTSTR lpszFilename) { // close file if it's already open if (m_File.m_hFile != NULL) { m_File.Close(); }
// open source file (bug fix by Mutex) if (!m_File.Open(lpszFilename, CFile::modeRead | CFile::shareDenyNone | CFile::typeBinary)) { return FALSE; } m_nTotalBytesSend = m_File.GetLength(); m_nTotalBytesTransfered = 0; return TRUE; }
|
при прохождении программой строк с m_File.Open выскакивает окно с ошибкой : [
| Код |
Debug Assertion Failed! Porgram: D:\Programming\Projects 2010\FtpServer\Debug\FtpServer.exe File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\filecore.cpp Line: 183
\*-----------блаблабла читайте документацию про asserts--------*\
(Press Retry to debug the application)
|
по нажатию на повтор компилятор указывает следующую строку
| Код |
BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pException) { /*---------------------------------------------------*/ // shouldn't open an already open file (it will leak) ASSERT(m_hFile == INVALID_HANDLE_VALUE);
/*--------------------------------------------------*/
|
shouldn't open an already open file (it will leak) - я не открываю уже открытый файл, т.к. перед вызовом функции идёт проверка
причём CDataSocket::PrepareReceiveFile файл всё таки создаётся, но записать в него не удаётся а при CDataSocket::PrepareSendFile файл открывается для чтения и мне удаётся в дальнейшем его переслать
как решить проблему? буду благодарен за помощь
Добавлено через 9 минут и 23 секунды вопрос решён нужно было сравнивать не с Null а со спец константой
| Код | if (m_File.m_hFile != CFile::hFileNull)
|
|