CFile возвращает отладочное утверждение

У меня есть старый проект в Visual C ++, и я пытаюсь перенести его в Visual Studio 2013. Когда я проверяю, существует ли текстовый файл, CFile возвращает ошибку подтверждения отладки. Код является:

if (!txt_file.Open(txt_name,    CFile::modeWrite | CFile::shareDenyWrite  | CFile::typeText))
{
//action if the file exists
}

В чем проблема, я делаю что-то не так?
Спасибо

L.E. :

txt_file объявлен как: CStdioFile txt_file в классе trace
txt_name объявлен как: private CString txt_name в методе с именем open_file из класса trace
Метод open_file содержит оператор if, который возвращает ошибку подтверждения отладки.

0

Решение

Вы, вероятно, используете:

CFile txt_file;

CFile не поддерживает текстовый режим.

Чтобы открыть в текстовом режиме, вы можете изменить на:

CStdioFile txt_file;

Это должно решить проблему (по крайней мере, используя CFile в этом случае генерируется утверждение).


Если вы используете CStdioFile уже, вероятно, есть проблема с (комбинацией) открытых режимов. В качестве теста попробуйте удалить CFile::shareDenyWrite, Там могут быть ограничения безопасности тоже.

mfc \ filecore.cpp Строка: 179

Лучше всего пройти через отладчик или посмотреть на filecore.cpp Line: 179 чтобы увидеть, что там проверено (я бы посмотрел на вас, но сейчас у меня нет Visual Studio 2013 — возможно, открытые режимы).

Обновить:

Это строка 179:

// shouldn't open an already open file (it will leak)

ASSERT(m_hFile == INVALID_HANDLE_VALUE);

Файл уже открыт. Поэтому нет необходимости открывать его снова или сначала нужно закрыть, чтобы открывать другие режимы открытия.

txt_file.Close();

Или проверить, открыт ли файл (недействителен для CMemFile):

if (txt_file.m_hFile != CFile::hFileNull) { // file already open
txt_file.Close();
}
0

Другие решения

Решено!

Вместо того, чтобы использовать кусок кода из вопроса, чтобы проверить, существует ли файл, я использовал следующий код:

  CFileStatus sts; //status flag
bool chkifFileExists = CFile::GetStatus(txt_name, sts); // return TRUE if the file exists else return falseif (!(chkifFileExists))

{
//do something
}

Спасибо всем за вашу поддержку!

0

По вопросам рекламы [email protected]