У меня есть старый проект в 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, который возвращает ошибку подтверждения отладки.
Вы, вероятно, используете:
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();
}
Решено!
Вместо того, чтобы использовать кусок кода из вопроса, чтобы проверить, существует ли файл, я использовал следующий код:
CFileStatus sts; //status flag
bool chkifFileExists = CFile::GetStatus(txt_name, sts); // return TRUE if the file exists else return falseif (!(chkifFileExists))
{
//do something
}
Спасибо всем за вашу поддержку!