Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > СFile::Open error


Автор: CallMeArt 27.6.2011, 00:20
Имеются две функции
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;
}



при прохождении программой строк с 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)

Автор: GremlinProg 27.6.2011, 06:12

M
GremlinProg
Тема перемещена из раздела C/C++: Системное программирование и WinAPI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)