Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ошибка с CFile::open

68K
27 июня 2011 года
CallMeArt
11 / / 25.06.2011
Имеются две функции
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 файл открывается для чтения и мне удаётся в дальнейшем его переслать

как решить проблему?
буду благодарен за помощь
68K
27 июня 2011 года
CallMeArt
11 / / 25.06.2011
вопрос решён
нужно было сравнивать не с Null а со спец константой

 
Код:
if (m_File.m_hFile != CFile::hFileNull)
260
27 июня 2011 года
Ramon
1.1K / / 16.08.2003
Для начала попытайтесь осознать разницу между NULL и INVALID_HANDLE_VALUE. И только после этого используйте CFile::hFileNull.

PS: Пост запоздал, но осознать разницу все же стоит.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог