Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2013, 17:01   #1
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию Ошибка EFCreateError

При использовании SaveToFile(FilePath) в цикле иногда возникает ошибка. В FilePath на каждой итерации передается следующий "путь_к_файлу" из списка. Цикл заканчивается, когда программа пройдет по всему списку.

Ошибка:
Цитата:
Project raised exception class EFCreateError with message 'Cannot create file C:\1\img4.gif'. Process stopped. Use Step or Run to continue
Как отследить из-за чего эта ошибка возникает(подробнее)? К слову, поймать исключение тоже не получается.

Код:
try{
                SaveToFile(FilePath);
                }
                catch (EFCreateError &error)
                {
                ShowMessage("EFCreateError exception: "+ AnsiString(error.Message));
                }
В итоге ShowMessage не выводит
GoriZonTT вне форума Ответить с цитированием
Старый 14.08.2013, 17:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

при запуске под отладчиком нажмите продолжить, и он должен перейти к обработчику.
так же попробуйте запустить без отладки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.08.2013, 17:39   #3
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Пропуск данного файла не избавляет от того, что он не создается) Я хочу посмотреть конкретно что ему не нравится, чтобы знать что ему нужно для корректной работы
GoriZonTT вне форума Ответить с цитированием
Старый 14.08.2013, 21:42   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

IDE по умолчанию перехватывает все исключения ДО пользовательского обработчика. Если запустишь просто EXE, то увидишь только своё сообщение "EFCreateError exception: Cannot create file C:\1\img4.gif". Причина исключения, вроде бы, достаточно красноречиво описана...
FataLL вне форума Ответить с цитированием
Старый 15.08.2013, 09:33   #5
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от FataLL Посмотреть сообщение
"EFCreateError exception: Cannot create file C:\1\img4.gif". Причина исключения, вроде бы, достаточно красноречиво описана...
Это же суть ошибки, а не причина. Суть: файл не создался. Причина: а почему не создался - черт его знает.

Вся красноречивость "EFCreateError" заканчивается описанием в Help:
Цитата:
Description

EFCreateError is thrown when an application unsuccessfully attempts to create a file. This can occur, for example, if a user specifies an invalid file name, or specifies the name of an existing file that cannot be overwritten because the user lacks appropriate access permission.
Что как бы намекает, что у меня: либо путь сам по себе дерьмо, либо какой-то процесс занял мой файл.

Проверка пути прошла успешно:
Код:
if ((!DirectoryExists(sDirPart))&&(sDirPart.IsEmpty())) {}
Попытка открыть файл показала мне, что у него вообще не получается открыть файл:
Код:
std::ofstream ostr(sFileName);
if (ostr.is_open()) {
ostr.close();
stream1->SaveToFile(sFileName);
}
else {
    ShowMessage("Error");
}
Напомню, что при каждом запуске он выводит в EFCreateError разные файлы(т.е. проблема не в одном конкретном файле). Причем догадок о том, что может занимать файлы нет.

Что за "магия"? Кто-нибудь сталкивался?

Последний раз редактировалось GoriZonTT; 15.08.2013 в 09:38.
GoriZonTT вне форума Ответить с цитированием
Старый 15.08.2013, 10:36   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А папка C:\1 существует?
А права записи там есть?
А файла с таким именем там случайно нет?
А создать там файл другими способами (скажем копированием) проходит?
waleri вне форума Ответить с цитированием
Старый 15.08.2013, 10:45   #7
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А папка C:\1 существует?
Существует

Цитата:
Сообщение от waleri Посмотреть сообщение
А права записи там есть?
Для нее и всех вложенных файлов и папок. Плюс часть фалов же как-то создается.

Цитата:
Сообщение от waleri Посмотреть сообщение
А файла с таким именем там случайно нет?
Нет. Папку удаляю и создаю по новой при каждом запуске(чтобы вручную не делать).

Цитата:
Сообщение от waleri Посмотреть сообщение
А создать там файл другими способами (скажем копированием) проходит?
Я получаю эти файлы в поток через Get(). Я думаю Copy не пройдет тут
GoriZonTT вне форума Ответить с цитированием
Старый 15.08.2013, 13:09   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Нет, вопрос был не копировать файл а как проверить можно ли создать файл с таким именем другим способом, скажем копированием файла с таким именем из другой папки, с целью проверки прав доступа и т.д.

Тогда идите другим путем - сделайте логирование работы программы типа "Открываю файл ABC", "Закрываю файл АВС" и т.д. Тогда сразу будет видно что и как. Например если у вас по какой-то причине НЕ меняется имя файла и пытаетесь второй раз открыть тот же файл.
waleri вне форума Ответить с цитированием
Старый 15.08.2013, 13:10   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

<Дубликат>
waleri вне форума Ответить с цитированием
Старый 15.08.2013, 15:43   #10
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Тогда идите другим путем - сделайте логирование работы программы типа "Открываю файл ABC", "Закрываю файл АВС" и т.д. Тогда сразу будет видно что и как. Например если у вас по какой-то причине НЕ меняется имя файла и пытаетесь второй раз открыть тот же файл.
Вот тут и борода. В логах все четко. Я сначала грешил на возможность попадания в переменные пути "мусора", но нет. Дважды не открывается, в логи вывожу прямо построчно. Просто ошибка вылетает, без всяких "неровностей".

Нашел причину. Все-таки дескриптор открыл и не закрыл. Ну что же это за...невнимательность. Всем спасибо и извините за хлопоты. Всем "лайк"
GoriZonTT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... infrared Помощь студентам 0 16.04.2009 17:44