Исключение при открытии файла - PullRequest
1 голос
/ 24 марта 2010

У меня есть приложение VC ++, и в моем приложении у меня есть некоторые основные файловые операции.

Ниже приведен код по умолчанию

CStdioFile cFile;
CFileException e;
CString sReport;
CString sHtmlfile = "testreport.html"
OutputDebugString((sHtmlfile));
if (!cFile.Open(sHtmlfile,CFile::modeCreate | CFile::modeWrite, &e ))
{
}

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

После нескольких запусков кода функция cFile.Open () не работает. Я пытался получить сообщение об ошибке

TCHAR szError[1024];
e.GetErrorMessage(szError,1024);
OutputDebugString((szError));

Ирония в том, что сообщение об ошибке szError "Ошибка не произошла".

Это снова работает, как только я перезапускаю свое приложение. Любая идея, почему это происходит.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 29 марта 2010

У вас работает несколько экземпляров? Я предлагаю вам использовать Process Explorer при возникновении ошибки, чтобы увидеть, существуют ли какие-либо другие указатели на указанный файл.

И GetLastError сообщат об ошибке, сообщенной последней функцией API. Если между ошибочным вызовом API и вызовом GetLastError были какие-либо другие вызовы API, то последнее значение ошибки перезаписывается. (Как уже отмечал @sbi в комментариях.)

1 голос
/ 29 марта 2010

Вы используете C ++. Ваша ошибка может быть полностью в другом месте. У меня была ошибка указателя, которая приводила к тому, что чистый код вызывал ошибку.

Вы пробовали строить в режиме релиза?

Я бы предложил попробовать пройтись и, возможно, сузить место, где появляется ваша ошибка.

1 голос
/ 24 марта 2010

Возможно, вы забудете закрыть файл, и он выйдет из файловых дескрипторов. Все они закрываются при выходе из приложения, и вы можете запустить его снова. Проверьте, закрыты ли ваши файлы.

OK. Если это не вышеуказанный случай, что это может быть? Вы получаете сообщение об ошибке от cFile.Open, поэтому мы можем верить, что оно точное.

Я не уверен, что произойдет, если другой файл с таким же именем уже открыт текущим процессом, или если вы попытаетесь открыть файл со странным именем, например пустой строкой. Чтобы разобраться в этом, вы также можете распечатать имя файла, который вы открываете с ошибкой (а также отследить случаи, когда ошибки не возникает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...