ошибка с CFile::open
m_File объявлен как
Код:
CFile 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;
}
{
// 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)
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)
ASSERT(m_hFile == INVALID_HANDLE_VALUE);
/*--------------------------------------------------*/
shouldn't open an already open file (it will leak) - я не открываю уже открытый файл, т.к. перед вызовом функции идёт проверка
причём CDataSocket::PrepareReceiveFile файл всё таки создаётся, но записать в него не удаётся
а при CDataSocket::PrepareSendFile файл открывается для чтения и мне удаётся в дальнейшем его переслать
как решить проблему?
буду благодарен за помощь
нужно было сравнивать не с Null а со спец константой
Код:
if (m_File.m_hFile != CFile::hFileNull)
PS: Пост запоздал, но осознать разницу все же стоит.